Самый быстрый способ вставить огромное кол-во данных в MySQL это импорт из csv-файла
В аналогичной задаче, где мне надо было обработать xml на 10+Гб и 150+млн строк для вставки решал в 2 этапа
1. потоковый парсинг xml чтобы не вылетать по памяти, и запись результатов в csv
2. импорт данных из csv в базу через
LOAD DATA LOCAL INFILE
. Никакой другой метод вставки данных по скорости не смог обойти загрузку из csv файла.
LOAD DATA LOCAL INFILE '{$csv_file}'
INTO TABLE `{$table_tmp}`
FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\\n'
IGNORE 1 ROWS;