Zdecydowanie musisz wybrać swoje podejście w oparciu o typ silnika... optymalizacja dla MyISAM lub dla InnoDB .
Niedawno przeprowadziliśmy test porównawczy porównujący różne sposoby wstawiania danych i mierzyliśmy czas od przed wstawieniem do pełnego przywrócenia wszystkich indeksów. Znajdował się na pustym stole, ale wykorzystaliśmy do 10 milionów wierszy.
MyISAM z LOAD DATA INFILE
i ALTER TABLE ... ENABLE/DISABLE KEYS
zwyciężył w naszym teście (w systemie Windows 7, MySQL 5.5.27 – teraz próbujemy go w systemie Linux).
ENABLE i DISABLE KEYS nie działają dla InnoDB, to tylko MyISAM. W przypadku InnoDB użyj SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;
jeśli jesteś pewien, że Twoje dane nie zawierają duplikatów (nie zapomnij ustawić ich na 1
po zakończeniu przesyłania).
Myślę, że nie potrzebujesz OPTIMIZE TABLE
po wstawieniu zbiorczym — wiersze MySQL są uporządkowane według wstawiania, a indeks i tak jest odbudowywany. Nie ma „dodatkowej fragmentacji” przy wstawianiu zbiorczym.
Zapraszam do komentowania, jeśli popełniłem błędy rzeczowe.
AKTUALIZACJA: Zgodnie z naszymi nowszymi i pełnymi wynikami testów, rada dotycząca klawiszy WYŁĄCZ / WŁĄCZ jest błędna.
Współpracownik zlecił programowi wykonanie wielu różnych testów - tabelę z wstępnie wypełnioną i pustą tabelą InnoDB / MyISAM, szybkościami selekcji i wstawiania z LOAD DATA LOCAL
, INSERT INTO
, REPLACE INTO
i UPDATE
, na „gęstych” i „pofragmentowanych” tabelach (nie jestem do końca pewien jak, myślę, że było to zgodne z DELETE FROM ... ORDER BY RAND() LIMIT ...
ze stałym ziarnem, więc nadal jest porównywalny) oraz włączonymi i wyłączonymi indeksami.
Przetestowaliśmy go z wieloma różnymi wersjami MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) w systemach Windows i Linux (jednak nie są to te same wersje w obu systemach operacyjnych). MyISAM wygrał tylko wtedy, gdy stół był pusty. InnoDB był szybszy, gdy dane były już obecne i ogólnie działał lepiej (z wyjątkiem przestrzeni hdd - MyISAM jest mniejszy na dysku).
Jednak aby naprawdę z niego skorzystać, trzeba to samemu przetestować – z różnymi wersjami, różnymi ustawieniami konfiguracji i dużą cierpliwością – zwłaszcza w odniesieniu do dziwnych niespójności (5.0.97 był dużo szybszy niż 5.5.27 z tą samą konfiguracją – my wciąż szukam przyczyny). To, co znaleźliśmy, to że DISABLE KEYS
i ENABLE KEYS
są prawie bezwartościowe, a czasem szkodliwe, jeśli nie zaczynasz od pustego stołu.