⊗ppSpOtSQ 80 of 83 menu

PHPにおけるSQLクエリの使用最適化

データベースへのSQLクエリの実行は 非常に遅い操作です。したがって、 データベースへのクエリ回数を最小限に抑えるよう 努める必要があります。

最も一般的な間違いは、 ループ内で多数のSQLクエリを実行することです。 一方で、望む動作を1つのコマンドで実行できる 代替クエリが存在する場合があります。

例を見てみましょう。

データベース内のレコードのidを持つ配列が与えられ、 そのようなidのレコードを削除する必要があるとします。

あまり考えずに、以下のような 「素晴らしい」構造を書いてしまうかもしれません:

<?php $ids = [1, 2, 3, 4, 5]; // 削除対象の配列 foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

このコードの問題点は、ループ内で多数のクエリが 実行されることです。配列に100個の要素が 含まれていると想像してみてください - データベースに対して100回のクエリが実行されます!

このタスクの特別な落とし穴は、 サイト開発中はデータベースが小さく、 クエリが非常に速く実行されることです。 しかし、ホスティング環境でのサイト運営が進むにつれて データベースは大きくなり、 クエリの実行は次第に遅くなり、 ループ内で数百回のクエリを実行することで、 サイトの読み込みに1分以上かかる事態に なる可能性があります!

ほんの少し努力を加えることで、 わずか1つのクエリのみを実行するように することができます。以下のように:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // 文字列 '1,2,3,4,5' を取得 mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

以下のコードを最適化してください:

<?php $arr = [1, 2, 2, 4, 5]; $res = []; for ($i = 1; $i < count($arr); $i++) { $note = mysqli_query($link, "SELECT * FROM users WHERE id=$id"); for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row); $res[] = $data; } var_dump($res); ?>
日本語
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItalianoქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
当サイトでは、サイトの動作、分析、パーソナライゼーションのためにクッキーを使用しています。 データ処理はプライバシーポリシーに従って行われます。
すべて受け入れる 設定 拒否