Несколько раз тестировал себя на 100 000 записей. Для более простого сценария я использовал не INSERT INTO, а REPLACE INTO, чтобы избежать необходимости каждый раз придумывать новые ключи.
ЗАМЕНИТЬ В
Пример необработанной замены в 3 столбца REPLACE INTO table_name VALUES (value1, value2, value3),(value1, value2, value3),(value1, value2, value3)......
на 100 000 строк занял приблизительно 14сек .
НОРМАЛЬНАЯ СВЯЗЬ
Использование подготовки оператора, привязка значения и выполнение подготовленного оператора заняли около 33 секунд
foreach ($vars as $var) {
$stmt->bindValue(':a' . $var["value1"], $var["value2"]);
$stmt->bindValue(':b' . $var["value3"], $var["value4"]);
$stmt->bindValue(':c' . $var["value5"], $var["value6"]);
$stmt->execute();
}
BIND BUT 1 EXECUTE
Создание длинного оператора перед его подготовкой, привязка всех параметров и выполнение за один раз заняло 22 секунд
REPLACE INTO clientSettings(clientId, settingName, settingValue) VALUES (:a1,:b1,:c1)
(:a2,:b2,:c2)
(:a3,:b3,:c3)
(:a4,:b4,:c4)
.......
Обратите внимание, что это грубые числа, использованные для создания REPLACE INTO (где поля были удалены и вставлены) в 100 000 записей.