Итак, я пытаюсь импортировать некоторые данные о продажах в свою базу данных MySQL. Данные изначально представлены в виде необработанного CSV-файла, который необходимо выполнить моему PHP-приложению, а затем сохранить обработанные данные о продажах в базу данных.импортировать массивные данные в MySQL
Первоначально я делал индивидуальные запросы INSERT
, которые я понял, был невероятно неэффективным (~ 6000 запросов, принимающих почти 2 минуты). Затем я сгенерировал один большой запрос и INSERT
опубликовал данные сразу. Это дало нам повышение эффективности на 3400% и сократило время запроса до чуть более 3 секунды.
Но, как я понимаю, LOAD DATA INFILE
предполагается еще быстрее, чем любой запрос INSERT
. Итак, теперь я собираюсь записать обработанные данные в текстовый файл и использовать LOAD DATA INFILE
, чтобы импортировать его в базу данных. Является ли это оптимальным способом вставки больших объемов данных в базу данных? Или я об этом совершенно не так?
Я знаю, что несколько тысяч строк в основном числовых данных не очень много в великой схеме вещей, но я пытаюсь сделать это приложение интрасети максимально быстрым/отзывчивым. И я также хочу убедиться, что этот процесс масштабируется, если мы решаем лицензировать программу для других компаний.
UPDATE:
Так что я пошел вперед и тест LOAD DATA INFILE
, как предложено, думая, что это может дать мне лишь незначительное увеличение скорости (так как я сейчас пишу одни и те же данные на диск дважды), но я был удивил, когда он сократил время запроса с более чем 3300 мс до ~ 240 мс. Страница все еще занимает около 1500 мс, чтобы выполнить общее количество, но она по-прежнему заметно лучше, чем раньше.
Отсюда я буду проверять, есть ли у меня лишние индексы в базе данных, и поскольку все, кроме двух моих таблиц, являются InnoDB, я буду изучать оптимизацию пула буферов InnoDB для оптимизации общей производительности ,
Я знаю, что этот вопрос был отправлен много веков назад, но я должен сказать, что разница между одним объемом INSERT и LOAD DATA INFILE - это время, которое было сохранено. Я пошел от 30 секунд/более с INSERT до примерно 10 секунд, загружая строку 11000 с 30 столбцами CSV-файла. –