MySQLi での一括値挿入のための拡張テクニック
大量の値を MySQL データベースに安全に挿入するというタスクに直面した場合、開発者は多くの場合、準備されたステートメントを繰り返し使用しますが、大規模なデータセットでは時間がかかる可能性があります。この記事では、SQL インジェクションのセキュリティを損なうことなくパフォーマンスを向上させる手法について説明します。
問題: スタック オーバーフローと挿入の遅さ
一般的なアプローチは、プリペアド ステートメントを内部で利用することです。ループして各値を個別に挿入します。ただし、データセットが大きい場合、この方法ではスタック オーバーフローが発生したり、実行時間が遅くなる可能性があります。
$array = ["array", "with", "about", "2000", "values"]; foreach ($array as $one) { $query = "INSERT INTO table (link) VALUES (?)"; $stmt = $mysqli->prepare($query); $stmt->bind_param("s", $one); $stmt->execute(); $stmt->close(); }
解決策: トランザクションと最適化された実行
上記のコードを使用すると、トランザクションを組み合わせて実行を改善できます。戦略:
$array = ["array", "with", "about", "2000", "values"]; $query = "INSERT INTO table (link) VALUES (?)"; $stmt = $mysqli->prepare($query); $stmt->bind_param("s", $one); $mysqli->query("START TRANSACTION"); foreach ($array as $one) { $stmt->execute(); } $stmt->close(); $mysqli->query("COMMIT");
実装の詳細:
パフォーマンス評価
10,000 回の反復によるテストでは、トランザクションを使用した場合の大幅なパフォーマンスの向上が実証されています。 :
この最適化手法により、速度が 2 桁向上し、MySQL への一括値挿入の効率的かつ安全なソリューションになります。 MySQLi を使用したデータベース
以上が速度とセキュリティのために MySQLi への一括データ挿入を最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。