PHP MySQL — большое количество запросов,

У меня есть PHP-скрипт, который очень быстро передает большое количество запросов в БД. БД MySQL ставит в очередь запросы по мере их поступления, если не может обрабатывать их с той же скоростью, с которой они передаются, или они теряются?

Моя программа написала и передала синтаксически правильные запросы в БД, но БД очень сильно отстает в плане информации, содержащейся в таблицах и количестве таблиц.

Пример кода (я немного новичок в PHP, поэтому мой код / ​​стиль кодирования может быть ужасающим):

//If table has one primary key
$val = $tblColPkArray[0];

$pkInsert = ", PRIMARY KEY (". $val['COLUMN_NAME'] .")";
$pkColName = $val['COLUMN_NAME'];

$string = ltrim($string, ",");

$oneCreateTableQuery = $beginning . $string . $pkInsert . $end;

echo $oneCreateTableQuery . "\n";

$newLink->query($oneCreateTableQuery);

$pkValuesInOld = "SELECT " . $pkColName . " FROM " . $tables . ";";

$pkValsResult = $link->query($pkValuesInOld);

while($pkValues = $pkValsResult->fetch(PDO::FETCH_ASSOC))
{
$pkRowValuesQuery = "SELECT * FROM " . $tables . " WHERE " . $pkColName . " = '" . $pkValues[$pkColName] . "';";

echo $pkRowValuesQuery . "\n";

$valsOfPkInOldTable = $link->query($pkRowValuesQuery);

while($pkVals = $valsOfPkInOldTable->fetch(PDO::FETCH_ASSOC))
{
//var_dump($ckVals);

$insertBeginning = "INSERT INTO " . $tables . "(";
$insertValuesSection = ") VALUES (";
$insertEnd = ");";
$keys = "";
$rowValues = "";

foreach($pkVals as $key => $value)
{
$keys = $keys . ", " . $key;
$rowValues = $rowValues . ", '" . $value . "'";
}

$insertStatement = $insertBeginning . ltrim($keys, ",") . $insertValuesSection . ltrim($rowValues, ",") . $insertEnd;

echo $insertStatement . "\n";

$newLink->query($insertStatement);

}//While loop: Inserting values of old table into new table via INSERT INTO statement

//unset();

} //While loop: Selecting all values from old table based on PK values per table, pass result of that query to next while loop

1

Решение

Вы можете сделать это в одном запросе вместо вызова нескольких операторов вставки.
Например, вместо того, чтобы выполнять эти 3 запроса,

INSERT INTO table VALUES(1, 2);
INSERT INTO table VALUES(3, 4);
INSERT INTO table VALUES(5, 6);
...

Вы можете выполнить этот запрос:

INSERT INTO table VALUES(1, 2), (3, 4), (5, 6), ...;
1

Другие решения

Похоже, вы могли бы даже комбинировать INSERT и SELECT:

INSERT INTO table (...)
SELECT ... FROM ...;

Кроме того, ваши вложенные циклы выглядят так:

INSERT INTO table (...)
SELECT ... FROM ...
JOIN ...;

Это было бы до один позвонить ->query() и устранить большую часть вашего кода.

1

По вопросам рекламы [email protected]