Так я написал скрипт, который импортировать данные из CSV-файла с более чем 1,5 млн строк в таблицу MySQL InnoDB, он будет сканировать CSV, то для каждого CSV строки:Slow вставки и обновления в большой таблице
- Искать в таблице, чтобы проверить, существует ли запись.
- Если существует, обновите запись.
- Если нет, вставьте новый.
Затем перейдите к следующей строке в CSV и выполните вышеуказанные шаги еще раз.
Проблема заключается в том, что таблица, данные которой будут импортированы, также имеет 1,5 м записи, что делает ее слишком медленной для импорта данных. Я попробовал сценарий и увидел, что:
- Если данные импортируются в пустую таблицу, он может импортировать 500 строк в минуту.
- Если импортировать данные в эту таблицу записей 1,5 м, она может импортировать только 30 строк в минуту.
Есть ли какое-либо решение для ускорения импорта?
Возможно, заменить 3 шага одной «вставкой в ... при повторном обновлении ключа ...». 'INSERT' уже выполняет повторную проверку ключа, делая вашу собственную проверку избыточной. – apokryfos
может убрать показать структуру таблицы? –
Вам нужно привести пример, например 'SHOW CREATE TABLE', который забирает вашу таблицу и связанные индексы. Как пишет @apokryfos, «ON DUPLICATE KEY» - настоящее решение здесь, он делает все за один шаг, беспорядок. Вы даже можете вставить непосредственно из файла CSV. – tadman