Вы определенно должны выбрать свой подход в зависимости от типа двигателя ... оптимизация для 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 был быстрее, когда данные уже присутствовали, и в целом работал лучше (за исключением места на жестком диске - MyISAM меньше на диске).
Тем не менее, чтобы по-настоящему извлечь из этого пользу, вы должны протестировать его самостоятельно - с разными версиями, разными настройками конфигурации и большим терпением - особенно в отношении странных несоответствий (5.0.97 был намного быстрее, чем 5.5.27 с тем же конфиг - мы все еще ищем причину). Что мы обнаружили, так это , что DISABLE KEYS
и ENABLE KEYS
почти бесполезны и иногда вредны, если вы не начинаете с пустой таблицы.