0

以下に示すように、クエリで返される行数をカウントする際に問題が発生するかどうか疑問に思っています。

$stm = $dbh->prepare("SELECT * FROM `mytable`");
$stm->execute();

$data = $stm->fetchAll(PDO::FETCH_ASSOC);

echo "rows: ".count($data);

使用するのとは対照的に

$stm = $dbh->prepare("SELECT COUNT(*) FROM `mytable`");`

パフォーマンスに関しては、どちらの方が優れており、比較的小規模なデータベース (1k 行以下) で問題が発生する可能性があります。

4

2 に答える 2

2

SQL でこれを行うと、select count(*) ...1 行だけがselect * ...返されますが、多くの行が返されます。そのため、かなりの通信オーバーヘッドがあります。さらに、where句がない場合、サーバーは行数を検索するだけかもしれません。対照的に、PHP は行を完全にカウントする必要があります。

小さなデータベースでは違いに気付かないかもしれませんが、最初からパフォーマンスを意識していても問題ありません。

于 2012-12-30T19:52:49.683 に答える
2

使用するCOUNT(*)方がはるかに優れています。MySQL はすべてのデータにアクセスする必要はなく、データもクライアントに送信されません。

COUNT(*)MySQL のマニュアルを参照してください。

于 2012-12-30T19:53:02.307 に答える