パフォーマンスの比較: ループ内の PDO::fetchAll と PDO::fetch
PDO::fetchAll() を使用するかの選択ループ内の PDO::fetch() は、特に大きな結果の場合、パフォーマンスとメモリ消費量の両方に影響を与える可能性があります。 ets.
パフォーマンス:
ベンチマークは、特に大きな結果セットの場合、ループ内で PDO::fetchAll() の方が PDO::fetch() よりも高速であることを示しています。これはおそらく、PDO::fetchAll() が単一のクエリを実行してすべての結果を一度に返すのに対し、PDO::fetch() は個々の行を取得するためにクエリを複数回実行する必要があるという事実によるものと考えられます。
メモリ消費:
ただし、PDO::fetchAll() は、ループ内で PDO::fetch() よりも多くのメモリを必要とします。これは、PDO::fetchAll() が結果セット全体をメモリに保存するのに対し、PDO::fetch() は常に現在の行のみを保存するためです。したがって、メモリの可用性が懸念される場合は、ループ内で PDO::fetch() を使用する方が適切である可能性があります。
ユーザー定義クラスのフェッチ:
へのフェッチの影響ユーザー定義クラスのオブジェクトのパフォーマンスは重要ではありません。 PDO::fetchAll() と PDO::fetch() はどちらも、PDOStatement::bindParam() メソッドを実装するクラスのオブジェクトへのフェッチをサポートします。
推奨事項:
結果セットが大きい場合、パフォーマンス上の理由から、通常は PDO::fetchAll() が推奨されます。ただし、メモリ消費量が制限要因である場合は、ループ内の PDO::fetch() がより良いオプションになる可能性があります。
コード例:
次のコードは、ループ内での PDO::fetchAll() と PDO::fetch() の両方の使用:
$dbh = new PDO('mysql:dbname=testage;dbhost=localhost', 'root', ''); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT * FROM test_table WHERE 1'; // Fetch all results into an array $stmt = $dbh->query($sql); $results = $stmt->fetchAll(); // Iterate over results using fetch() $stmt = $dbh->query($sql); while ($row = $stmt->fetch()) { // Process each row }
以上がループ内の PDO::fetchAll() と PDO::fetch(): データベースの取得ではどちらが効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。