私はmysqli_store_result
で読んでいますが、これはオプトインでオプトアウトではない理由を理解できません。マニュアルによれば、私はこれをメモリの重い操作に使うべきではないが、一度に50〜100行程度のテキストを取り出すだけで、いつも使うべきだという結論に至る。 1つのクエリごとに呼び出すこれは私にとっては不思議なようだ。私は何か誤解していることを私に示すので、これを言う。デフォルトでmysqli_store_resultを使用してください
私が理解する限り、 100行を読み込んでwhile ($stmt->fetch())
を使用すると、実際にはネットワーク経由で100のread-next-requestをMySQLに送信しています(WebとDBは別のマシンにあると仮定します)。 mysqli_store_result
を使用する場合は、リクエストを1回だけ送信し、結果セットをWebサーバー上でループします。なぜ私はいつもこれをやっていないだろうか?私は何が欠けていますか?
サブクエリ:これは私のMySQLステータス変数 "handler read next"が非常に高く、store_resultヘルプと関係がありますか?
imo、私はあなたの質問の「ネットワーク越し」の部分についてはわかりません。 PHPスクリプトは、データベースが正常に稼動しているサーバー上で実行されます。私は、PHPとデータベースエンジンの間のネットワークオーバーヘッドが重要ではないと考えています。つまり、100フェッチを低速関数呼び出しと考える傾向があります。また、データはデータベースエンジンによってバッファされています。したがって、どちらの側もデータを取得するために多くの作業を行う必要はありません。 –
PHPスクリプトはWebサーバー上で実行され、データベースサーバー上では実行されません。アプリケーションが注目すべきサイズにスケールされていない場合、これらは通常は同じホストにすぎません。私はいくつかの簡単なテストを行い、結果を保存するかどうかの違いを測定することはできません。今私はそれが何の役目を果たすのか分かりません。 – nickdnk
大きなデータベースについてのポイント –