Do masowego importu (bulk insert) dużych ilości danych wykorzystywane są specjalistyczne polecenia i narzędzia: BULK INSERT, COPY, LOAD DATA INFILE, zewnętrzne narzędzia typu bcp (SQL Server), psql (PostgreSQL), a także narzędzia ETL.
Przykład dla PostgreSQL:
COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- Sprawdzanie danych, przeniesienie do tabeli produkcyjnej po walidacji INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;
Pytanie: Dlaczego po bulk insert do dużej tabeli z indeksem może nastąpić nagły spadek wydajności kolejnych operacji?
Odpowiedź: Ponieważ bulk insert wypełnia tabelę bezpośrednio, a indeksy są przekształcane/aktualizowane dopiero po głównym imporcie, co może blokować tabelę i pochłaniać zasoby. Zaleca się wyłączanie indeksów wtórnych na czas importu i ponowne ich tworzenie po zakończeniu, lub dzielenie na partie.
Historia
W projekcie logistycznym załadowano miliony wierszy poprzez BULK INSERT bez tabeli tymczasowej — niewłaściwe dane "zapchały" indeksy niewłaściwymi informacjami, po czym z powodu FK i constraints nie udało się po prostu "cofnąć" części złych wierszy. Dane musiały być czyszczone ręcznie.
Historia
W usługach korporacyjnych bulk insert zwiększał czas importu dziesięciokrotnie, ponieważ podczas załadunku nie wyłączono indeksów wtórnych, a na każdym kroku przeliczano ich strukturę.
Historia
W produkcie fintech, podczas ładowania dużych plików bulk insert nie załadował wszystkich wierszy z powodu cichych błędów, ponieważ kody błędów nie zostały prawidłowo przetworzone — część ważnych informacji została utracona i odkryto to dopiero po zestawieniu z zewnętrznymi źródłami kilka dni później.