rammtw
@rammtw
Press CTRL+S to save project

Как ускорить вставку в цикле MySQL?

Выполняю вставку в таблицу в цикле (около 20к записей), выполняется довольно долго (несколько минут).
Когда открываю транзакцию перед циклом, а после делаю коммит, вставка проходит очень быстро. Хотелось бы узнать почему? И какие еще есть "фишки" для ускорения выполнения запросов (insert, update) ?
  • Вопрос задан
  • 503 просмотра
Решения вопроса 1
orlov0562
@orlov0562 Куратор тега PHP
I'm cool!
Проблема в том, что при выполнении каждого запроса, происходит автокомит, что в свою очередь нагружает диск.
Установи autocomit=0 и после выполняй COMMIT, после порции отправленных данных.

Транзакция помогает именно по тому, что старт транзакции устанавливает autocomit в 0, а по завершении возвращает его в исходное состояние.

Ну, и как говорили, объединяй данные в группы. Так же если это не критично и единичная операция, можно отключать проверку внешних связей (foreign_key_checks=0) и уникальных ключей (unique_checks=0)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Quieteroks
php программист
А вы не пробовали сформировать один пакетный запрос и выполнить его?

INSERT INTO `table` (`field`) VALUES (1), (2), (3);
Ответ написан
gromdron
@gromdron
Работаю с Bitrix24
А у Вас таблица в MyISAM или InnoDB ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы