Определено трябва да изберете своя подход въз основа на типа на двигателя... оптимизиране на за MyISAM или за InnoDB .
Наскоро проведохме бенчмарк, сравняващ различни начини за вмъкване на данни и измервахме времето от преди вмъкването и до пълното възстановяване на всички индекси. Беше на празна маса, но използвахме до 10 милиона реда.
MyISAM с LOAD DATA INFILE
и ALTER TABLE ... ENABLE/DISABLE KEYS
печели ръце в нашия тест (на система Windows 7, MySQL 5.5.27 - сега го изпробваме на система Linux).
ENABLE и DISABLE KEYS не работи за InnoDB, това е само MyISAM. За InnoDB използвайте SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0;
ако сте сигурни, че вашите данни не съдържат дубликати (не забравяйте да ги зададете на 1
след като качването приключи).
Не мисля, че имате нужда от OPTIMIZE TABLE
след групово вмъкване - MySQL редовете се подреждат чрез вмъкване и индексът така или иначе се възстановява. Няма „допълнителна фрагментация“ чрез групово вмъкване.
Чувствайте се свободни да коментирате, ако съм допуснал фактически грешки.
АКТУАЛИЗИРАНЕ: Според нашите по-скорошни и пълни резултати от теста, съветът за ИЗКЛЮЧВАНЕ/АКТИВИРАНЕ на клавишите е грешен.
Един колега имаше програма, която изпълни множество различни тестове - таблица с предварително попълнена и празна InnoDB / MyISAM, скорост на избор и вмъкване с LOAD DATA LOCAL
, INSERT INTO
, REPLACE INTO
и UPDATE
, на "плътни" и "фрагментирани" таблици (не съм съвсем сигурен как, мисля, че беше по реда на DELETE FROM ... ORDER BY RAND() LIMIT ...
с фиксирано начално число, така че все още да е сравнимо) и активирани и деактивирани индекси.
Тествахме го с много различни версии на MySQL (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) на Windows и Linux (но не едни и същи версии и на двете ОС). MyISAM спечели само когато масата беше празна. InnoDB беше по-бърз, когато данните вече бяха налични и като цяло работеше по-добре (с изключение на hdd-space - MyISAM е по-малък на диска).
Все пак, за да се възползвате наистина от него, трябва да го тествате сами - с различни версии, различни конфигурационни настройки и много търпение - особено по отношение на странни несъответствия (5.0.97 беше много по-бърз от 5.5.27 със същата конфигурация - ние все още търся причината). Това, което открихме е че DISABLE KEYS
и ENABLE KEYS
са почти безполезни и понякога вредни, ако не започнете с празна маса.