Быстрая вставка в MySQL
Используйте INSERT DELAYED
или INSERT LOW_PRIORITY
(для MyISAM
), когда MySQL используется для ведения журналов. Также для MyISAM
можно добавить опцию DELAY_KEY_WRITE=1
, что позволит быстрее обновлять индексы, так как они не будут записываться на диск, пока файл не закроется.
Группируйте несколько INSERT'ов, чтобы вставить несколько строк за один раз. Запрос в этом случае выполнится быстрее за счет того, что время соединения, посылки и разбора запроса примерно в 5-7 раз больше, чем фактическая вставка данных.
Если группировать вставку не возможно, используйте START TRANSACTION
и COMMIT
(для InnoDB). Для MyISAM пользуйтесь LOCK TABLES
, что сокращает время, так как буфер индекса сбрасывается на диск только один раз, после того, как все операторы INSERT были выполнены. При этом желательно разблокировать таблицы примерно через 1000 вставленных строк, чтобы дать другим потокам доступ к таблице.
Для вставки/обновления данных используйте конструкцию INSERT ... ON DUPLICATE KEY UPDATE
, тогда не надо будет делать SELECT
, чтобы узнать, есть ли такие данные в базе, и затем выбирать между INSERT
и UPDATE
.