ループ内の PDO::fetchAll() と PDO::fetch() : 大規模な結果セットのパフォーマンスへの影響
データベース内PDO を使用したプログラミングでは、PDO::fetchAll() を使用する場合と PDO::fetch() を使用する場合にパフォーマンスの違いはあるのかという疑問が生じます。大きな結果セットのループ内で?この問い合わせは、カスタム定義クラスのオブジェクトへのデータのフェッチに関するものです。
直感的には、PDO::fetchAll() は 1 つのステートメントで複数の操作を実行できるため、より高速であると思われるかもしれません。ただし、PDO ドキュメントにはこれが明示的に示されていません。次の分析は、パフォーマンスへの影響を明確にすることを目的としています。
ベンチマーク結果
パフォーマンスを評価するために、200k のランダム レコードを含むテーブルを使用してベンチマークが実行されました。結果は次のとおりでした。
解釈
結果は、PDO::fetchAll() がループ内で PDO::fetch() を使用するよりも実際に高速であることを示しています。ただし、かなり多くのメモリも必要になります。これは、 fetchAll() が結果セット全体をメモリに保存するのに対し、 fetch() は一度に 1 行ずつ結果を取得するためです。
パフォーマンスに影響する要素
パフォーマンスの違いfetchAll() と fetch() の間は、次のような要因の影響を受けます。
結論
大規模な結果セットを処理し、メモリに制約がない場合、PDO::fetchAll() は優れたパフォーマンスを提供します。ただし、メモリ消費が重要なシナリオでは、ループ内の PDO::fetch() が実行可能な代替手段になる可能性があります。
以上がループ内の PDO::fetchAll() と PDO::fetch(): 大規模なデータセットではどちらが高速ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。