Sc0undRel
@Sc0undRel

Как ускорить множество INSERT в Mysql?

У меня php скрипт выполняет цикл while, который повторяется 10 000 раз и каждый раз выполняет по 1 INSERT в базу данных.
В итоге время выполнения скрипта почти до минуты доходит.. можно ли как-то ускорить?
  • Вопрос задан
  • 3466 просмотров
Пригласить эксперта
Ответы на вопрос 5
index0h
@index0h
PHP, Golang. https://github.com/index0h
Можно запихнуть все это дело в транзакцию, так индексы пересчитаются 1 раз.

Правда я бы рекомендовал пакетную вставку в цыкле. В смысле набить запрос на N вставок одним insert, выполнить, далее еще раз наполнить и выполнить и т.д.
Ответ написан
Комментировать
mahoho
@mahoho
Full stack certified PHP developer.
Уложите данные в CSV (при помощи fopen(), fputcsv()), а затем воспользуйтесь LOAD DATA INFILE (для MySQL) или BULK INSERT (для SQL Server). Будет ультра быстро, поскольку описанные выше инструкции были созданы именно для массовой загрузки.
Ответ написан
Комментировать
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Конечно. Не делать это в цикле, а делать пакетно. Кстати, хорошо бы код показывать и объяснять, зачем такой цикл необходим.
Ответ написан
@zhainar
Гуглю за вас
Что мешает собрать один большой запрос и сделать один запрос:
INSERT INTO MyTable ( Column1, Column2 ) VALUES
( Value1, Value2 ), ( Value1, Value2 ), ( ValueN, ValueN )
Ответ написан
@shagguboy
LOAD DATA INFILE
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы