ホームページ >データベース >mysql チュートリアル >ループ内の PDO::fetchAll() と PDO::fetch(): 大規模なデータセットではどちらがより効率的ですか?

ループ内の PDO::fetchAll() と PDO::fetch(): 大規模なデータセットではどちらがより効率的ですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-03 01:43:11293ブラウズ

PDO::fetchAll() vs. PDO::fetch() in a Loop: Which is More Efficient for Large Datasets?

大規模な結果セットのループにおける PDO::fetchAll と PDO::fetch の比較

大規模な結果セットの取得を伴うシナリオでは、次のような一般的な疑問が生じます。どちらのメソッドがより効率的であることがわかりますか。PDO::fetchAll() または PDO::fetch()ループ?

パフォーマンスとメモリのトレードオフ

私たちの最初の仮定は、MySQL の mysql_query( とは異なり、複数のデータベース操作を同時に実行できる PDO の機能により、PDO::fetchAll() が速度の点で優れている可能性があることを示唆しています。 )、一度に 1 つの操作を処理します。しかし、PDO のドキュメントはこの点に関して沈黙を保っており、仮定が不十分です。

この疑問を解決するために、200,000 レコードのデータセットを使用してベンチマークを実施しました。結果は、PDO::fetchAll() が確かに高速なパフォーマンスを提供することを確認しています:

fetchAll : 0.35965991020203s, 100249408b
fetch : 0.39197015762329s, 440b

ただし、このパフォーマンスの向上には代償が伴います。 PDO::fetchAll() は、ループ内で PDO::fetch() よりもはるかに多くのメモリを必要とします。

ベンチマーク コード

ベンチマークを複製するには、次のコードを利用できます。

$dbh = new PDO('mysql:dbname=testage;dbhost=localhost', 'root', '');
$sql = 'SELECT * FROM test_table WHERE 1';
$stmt = $dbh->query($sql);

// FetchAll benchmark
$start_all = microtime(true);
$data = $stmt->fetchAll();
$end_all = microtime(true);

// Fetch loop benchmark
$data = array();
$start_one = microtime(true);
while($data = $stmt->fetch()){}
$end_one = microtime(true);

結論

結論として、大規模な結果セットを扱う場合、 PDO::fetchAll() は、ループ内で PDO::fetch() よりもパフォーマンスが向上します。ただし、この改善は、PDO::fetchAll() のメモリ消費量の増加によって相殺されます。したがって、理想的な選択は、アプリケーションの特定の要件、速度とメモリ使用量のバランスによって決まります。

以上がループ内の PDO::fetchAll() と PDO::fetch(): 大規模なデータセットではどちらがより効率的ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。