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