Zdecydowanie musisz wybrać swoje podejście w zależności od typu silnika ... optymalizując for MyISAM lub for InnoDB.
Niedawno przeprowadziliśmy test porównawczy, porównując różne sposoby wstawiania danych i mierząc czas sprzed wstawienia, aż do pełnego przywrócenia wszystkich indeksów. To było na pustym stole, ale użyliśmy do 10 milionów wierszy.
MyISAM z i ALTER TABLE ... ENABLE/DISABLE KEYS
zwyciężył w naszym teście (na systemie Windows 7, MySQL 5.5.27 - teraz próbujemy go w systemie Linux).
Klawisze ENABLE i DISABLE KEYS nie działają dla InnoDB, tylko MyISAM. W przypadku InnoDB użyj SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;
, jeśli masz pewność, że twoje dane nie zawierają duplikatów (nie zapomnij ustawić ich na 1
po zakończeniu przesyłania).
Nie sądzę, że potrzebujesz OPTIMIZE TABLE
po wstawieniu luzem - wiersze MySQL są sortowane przez wstawienie, a indeks jest mimo wszystko przebudowywany. Nie ma "dodatkowej fragmentacji", wykonując wkładkę luzem.
Zapraszam do komentowania, jeśli popełniłem błędy merytoryczne.
AKTUALIZACJA: Zgodnie z naszymi nowszymi i pełnymi wynikami testów, porady dotyczące kluczy WYŁĄCZ/AKTYWUJ są nieprawidłowe.
Współpracownik miał program uruchomić wiele różnych testów - stół z InnoDB/MyISAM fabrycznie wypełniony i pusty, selekcji i przyspiesza wstawkami z LOAD DATA LOCAL
, INSERT INTO
, REPLACE INTO
i UPDATE
na „gęste” i „rozdrobnionych” stołach (jestem nie do końca pewny jak, myślę, że to było na linii DELETE FROM ... ORDER BY RAND() LIMIT ...
ze stałym nasieniem, więc wciąż jest porównywalne) i włączonymi i diasabled indeksami.
Testowaliśmy to 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 w obu wersjach systemu operacyjnego). MyISAM wygrał tylko wtedy, gdy stół był pusty. InnoDB był szybszy, gdy dane były już obecne i ogólnie wykonywane lepiej (z wyjątkiem przestrzeni dyskowej Hdd - MyISAM jest mniejszy na dysku).
Mimo to warto to przetestować samodzielnie - z różnymi wersjami, różnymi ustawieniami konfiguracyjnymi i dużą cierpliwością - szczególnie w odniesieniu do dziwnych niespójności (5.0.97 był dużo szybszy niż w wersji 5.5.27 ta sama konfiguracja - wciąż szukamy przyczyny). To, co znaleźliśmy, to:, z których DISABLE KEYS
i ENABLE KEYS
są bezwartościowe, a czasem szkodliwe, jeśli nie zaczynasz od pustej tabeli.
Czy jesteś pewien, że kluczowa aktualizacja jest wąskim gardłem? – abcde123483
To jest moje zmartwienie i jest ktoś, kto ma takie same obawy tutaj http://forums.mysql.com/read.php?21,68820,68939#msg-68939 – Mellon
W każdym razie te indeksy zostaną utworzone po ponownym włączeniu ich ponownie . Spróbuj wstawić wstawkę zamiast wiersza/wiersza, a także zrobić statystyki aktualizacji i sprawdzić, czy to coś poprawia. – Rahul