5

レコードの総数を取得するには、通常、次のクエリを使用します。

$total= mysql_num_rows(mysql_query("SELECT id FROM t_statistic WHERE pageid = $pid"));

しかし、私は以下のようなもう1つのクエリを取得しました:

$data = mysql_fetch_object(mysql_query("SELECT COUNT(id) AS num_rows FROM t_statistic WHERE pageid = $pid"));
$total = $data->num_rows;

上記の2つのクエリの間。どちらがより迅速かつ効果的ですか(レコードの総数が数百万の場合)?

4

4 に答える 4

5

私は2番目のクエリを好みます。すでにレコード数が表示されますが、最初のクエリではIDのリスト(数ではありません)が表示されますが、フィルタリングされていますが、IDがテーブルに複数存在する場合があります。

于 2012-10-11T03:38:17.277 に答える
1

2番目のクエリは迅速かつ効率的です。

SELECT COUNT(id)AS num_rows FROM t_statistic WHERE pageid = $ pid

クエリの最適化について知っている場合。クエリは、回答を計算している間、メモリにカウントのみを保持します。そして、行数を直接与えます。

最初のクエリとして:

SELECT id FROM t_statistic WHERE pageid = $ pid

選択したすべての行をメモリに保持します。その後、行数が次の操作で計算されます。

したがってsecond 、クエリは両方の方法で最適です。

于 2012-10-11T03:52:07.933 に答える
0

間違いなく2番目のもの。

MySQLなどの一部のエンジンは、テーブルのデータではなくインデックスを確認するだけでカウントを実行できます。

私は何百万ものレコードを持つデータベースで次のようなものを使用しました。

SELECT count(*) as `number` FROM `table1`;

mysql_num_rows($ res);よりもはるかに高速です。

ところで:Count(*)の*は基本的に、データを調べず、Count(colname)ではなく、レコードをカウントすることを意味します。

于 2012-10-11T03:49:16.297 に答える
0
1) SELECT COUNT(*) FROM t_statistic WHERE pageid = $pid" --> count(*) counts all rows

2)SELECT COUNT(id) FROM t_statistic WHERE pageid = $pid" --> COUNT(column) counts non-NULLs only

3) SELECT COUNT(1) FROM t_statistic WHERE pageid = $pid" -->COUNT(1) is the same as COUNT(*) because 1 is a non-null expressions

Your use of COUNT(*) or COUNT(column) should be based on the desired output only.

それで。最後に、count(column)はcount(*)と比較して高速であるという結果が得られました。

于 2012-10-11T04:02:06.040 に答える