Czasem mamy bardzo mało czasu na załadowanie danych do tabeli. Nie robi się wtedy ważne miejsce na dysku tylko szybkość wykonania. Ostatnio spotkałem się z takim problemem stąd też ten wpis.
Tworzymy sobie dowolną tabelkę. Posłużymy się najlepiej jakąś istniejącą z większą liczbą rekordów. Na jej podstawie stworzymy tabelkę do naszego tematu
![]()
Zróbmy sobie zliczenie rekordów w nowej tabeli aby wiedzieć ile razy powielić dane aby było ich ponad 2 miliony rekordów
![]()
Teraz napiszmy krótki skrypt który powieli nam każdy rekord powiedzmy 10 tysięcy razy

Teraz zapytanie o liczbę rekordów w tabeli powinno zwrócić liczbę 2370000
Stworzymy sobie nową tabelkę o nazwie KRAJE_2 na podstawie tabelki kraje ale tym razem bez danych
![]()
Mamy już dość sporą tabelkę KRAJE, możemy więc przystąpić do pracy.
Na początku musimy zmienić wartość LOGGING najnowszej tabelki. Tworząc tabelę domyślna wartość ustawiona jest na YES i jest to poprawne i bezpieczne. Wartość LOGGING określa czy chcemy logować informację o tabeli w plikach powtórzeń. Ustawienie na wartość NOLOGGING pomoże nam zminimalizować generowanie rekordów powtórzeń.
Wykonajmy więc nasze zapytanie aby upewnić jaką wartość ma nasza tabelka.

W powyższym zrzucie widzimy że nasze tabelki mają wartość YES czyli LOGGING. Zmieńmy ją teraz na NO czyli NOLOGGING dla drugiej tabeli
![]()
Powyższe zapytanie powinno nam teraz wyświetlić

Uzupełnijmy teraz naszą tabelkę KRAJE_2 danymi z tabeli KRAJE czyli ponad dwoma milionami rekordów. Może od razu napiszmy to w bloku aby od razu było widać różnicę pomiędzy zwykłym INSERT’em a wykorzystaniem bezpośredniej ścieżki do pliku czyli /*+APPEND */

I wynik, gdzie widzimy że INSERT z bezpośrednią ścieżką do pliku wykonał się około 3,5 razy szybciej

WAŻNE !
Należy pamiętać że użycie opcji NOLOGGING powoduje niemożliwość odtworzenia takich danych jeśli wystąpi problem podczas ładowania. Jeśli więc nasza operacja INSERT z hint APPEND przebiegła pomyślnie zaraz po jej wykonaniu zróbmy kopię zapasową tabeli oraz zmieńmy jej wartość na YES w kolumnie LOGGING.
Jeśli dane są kluczowe i nie można ich odtworzyć i załadować ponownie to lepiej nie korzystać z opcji NOLOGGING. Wtedy zastosowanie INSERT z bezpośrednią ścieżką do pliku i tak będzie szybsze niż zwykłe załadowanie danych.
Możemy jeszcze wykonać insert z opcją LOGGING dla porównania.
Warunkiem zastosowania opcji NOLOGGING na tabeli i jej działania jest to żeby baza była również ustawiona w tryb NO. Jeśli przestawimy nielogowanie dla tabeli ale baza będzie ustawiona na YES to i tak ustawienie dla bazy jest nadrzędne. Warto więc sprawdzić ustawienie bazy odpytując widok v$database
![]()

