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