2012-01-13 7 views
1

可能性の重複:
In SQL, what's the difference between count(column) and count()?
Count(
) vs Count(1)SQL行数の最適化になっ

Iは、例えば、電子メールの内容やニュースのために長いテキストを保つ大きなテーブルを持っています。

SELECT COUNT(*) FROM table_name 

SELECT COUNT(t.id) FROM table_name as t 

どちらが優れている:そして、私の質問 は、テーブルの行をカウントするためのパフォーマンスのために何か違いはありますか?後者はクエリオプティマイザによって最適化されますか?これに関する文書はありますか?

+1

'id'はnullでない列(PKのように見えます)であると仮定します。彼らはまともなDBMSで同じでなければなりません –

+4

@juergend - COUNT(*)とCOUNT(1)は同義語です。しかし、COUNT(id)は異なる動作をします。 – MatBailie

答えて

2

これらは異なっています。

COUNT(*)はすべての値を取得します(NULLの値もカウントされます)。 COUNT(t.id)は、NULLの値を数えません。


パフォーマンスに関しては、それらは同じです(クエリオプティマイザはスマートです)。

+1

パフォーマンスの面では、NULL可能ではない列に対しては同じように分類されます。カラムがヌル可能でない場合、QOは指定されたカラムを含まないより狭いインデックスを選択できます(MySQLの場合は、どのストレージエンジンも覚えていません)。 –

1

クエリプランも同じように見えますが、テストで*を使用する方が高速です(わずかに)。

カラム名を指定する際には、NULLは考慮されていません。