Използвате ли цикъл for?
Но най-бързият вариант за зареждане на данни в MySQL е да използвате ЗАРЕДЕТЕ ВХОДЯЩ ФАЙЛ С ДАННИ можете да създадете файла за зареждане чрез PHP и след това да го подадете към MySQL чрез различен процес (или като последна стъпка в оригиналния процес).
Ако не можете да използвате файл, използвайте следния синтаксис:
insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)
така че намалявате до общия брой изречения за изпълнение.
РЕДАКТИРАНЕ:Като се има предвид вашият фрагмент, изглежда, че можете да се възползвате от INSERT ... ON АКТУАЛИЗАЦИЯ НА ДУБЛИРАН КЛЮЧ синтаксис на MySQL, оставяйки базата данни да върши работата и намалявайки количеството на заявките. Това предполага, че вашата таблица има първичен ключ или уникален индекс.
За да достигнете до DB на всеки 100 реда, можете да направите нещо като (МОЛЯ, ПРЕГЛЕДАЙТЕ ГО И ГО ПОПРАВЕТЕ ЗА ВАШАТА СРЕДА )
$insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();
foreach($itemList as $key => $item){
$val1 = escape($item->col1); //escape is a function that will make
//the input safe from SQL injection.
//Depends on how are you accessing the DB
$val2 = escape($item->col2);
$queries[] = $insertOrUpdateStatement1.
"('$val1','$val2')".$insertOrUpdateStatement2.
"col1 = '$val1', col2 = '$val2'";
$counter++;
if ($counter % 100 == 0) {
executeQueries($queries);
$queries = array();
$counter = 0;
}
}
И executeQueries ще грабне масива и ще изпрати единична множествена заявка:
function executeQueries($queries) {
$data = "";
foreach ($queries as $query) {
$data.=$query.";\n";
}
executeQuery($data);
}