我見過多個線程討論這個問題,但答案總是存在完全不同的結論。特別是我想知道是否真的有必要創建一個自己準備好的語句(使用適當數量的佔位符),以便將其作爲單個查詢插入。 我預計,當我在我的for循環之前和之後使用beginTransaction
和endTransaction
時,pdo/php會等待事務處理,直到收集完所有數據爲止,並且一旦服務器命中endTransaction
,就會將這些數據作爲單個查詢發送。多行插入儘可能快
爲了達到最佳性能(它通常在1到300行之間,但也可能達到2000行),我需要如何重寫這樣一個for循環插入多個插入。
for($i=0; $i<$baseCount; $i++)
{
$thLevel = $bases[$i]["ThLevel"];
$gold = $bases[$i]["Gold"];
$elixir = $bases[$i]["Elixir"];
$darkElixir = $bases[$i]["DarkElixir"];
$dateFound = $elixir = $bases[$i]["TimeFound"];
$query = $db->prepare("INSERT INTO bot_attacks_searchresults (attack_id, available_gold, available_elixir, available_dark_elixir, date_found, opponent_townhall_level)
VALUES (:attack_id, :available_gold, :available_elixir, :available_dark_elixir, :date_found, :opponent_townhall_level)");
$query->bindValue(':attack_id', $attackId);
$query->bindValue(':available_gold', $gold);
$query->bindValue(':available_elixir', $elixir);
$query->bindValue(':available_dark_elixir', $darkElixir);
$query->bindValue(':date_found', $dateFound);
$query->bindValue(':opponent_townhall_level', $thLevel);
$query->execute();
}
有多快,我們談論的 – Rohit
構建循環內的查詢。在循環外執行查詢。 – Strawberry