2012-10-11 22 views
5

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

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

を私は一つの他のクエリ以下のようになった:

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

上記の2つのクエリの間。より迅速で効果的なのは何百万人のレコードの総数ですか?

+0

はどちらも選択クエリが成功したとみなし、何か問題が生じた場合には爆発します。クエリが動作すると仮定すると悪い方法です。 –

+0

http://stackoverflow.com/questions/2485224/sql-php-which-is-faster-mysql-num-rows-or-select-countの可能な複製 – janenz00

答えて

5

私は第2のクエリを好む。最初のクエリではIDのリスト(ではなく、)が表示されますが、フィルタリングされていますが、IDが複数回表に存在する場合があります。

0

間違いなく第2のもの。

MySQLのようなエンジンの中には、テーブルのデータではなくインデックスを調べるだけのものがあります。

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

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

より速い方法:mysql_num_rows($ res);

ところで:Count(*)は基本的にデータを見ないことを意味し、Count(colname)ではなくレコードを数えます。

1

2番目のクエリを迅速かつ効率的である:あなたは、クエリの最適化について知っている場合はpageidに= $ pidの

t_statistic FROM NUM_ROWS AS

SELECT COUNT(ID)。クエリは、答えを計算している間だけメモリにカウントされます。そして、行数を直接与えます。

最初の照会など:

SELECT ID t_statistic WHERE pageidに= $ pidの

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

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

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. 

So.最後にcount(column)はcount(*)よりも高速です。

関連する問題