回答:
これはCOUNT(any_non_null_column)
、COUNT(*)
違いを引き起こすNULL値がないため、当然同じことを意味します。
一般に、COUNT(*)
インデックスが作成されてCOUNT(column_or_expression)
いないか、SARGableである可能性があるため、任意のインデックスを使用できるため、より良いはずです。
ANSI-92から(「Scalar expressions 125
」を探す)
場合:
a)COUNT(*)が指定されている場合、結果はTのカーディナリティーです。
b)それ以外の場合、TXを<value expression>をTの各行に適用し、null値を削除した結果である単一列テーブルにします。1つ以上のNULL値が削除されると、完了条件が発生します。警告-設定関数でNULL値が削除されます。
同じルールが少なくとも SQL ServerとSybaseにも適用されます
注:1はNULL不可能な式であるため、COUNT(1)はCOUNT(*)と同じです。
COUNT(*)
でCOUNT(<constant>)
ありCOUNT(<column name>)
、3つすべての前にALL
orを付けることができると考えましたDISTINCT
(ALL
省略した場合はデフォルトになります)。私はあなたが言うところにどんな表現を使うことができるのだろうか_or_expression
?
COUNT(1)
は、役に立たない例として、と同じCOUNT(*)
です。COUNT(CASE WHEN a>b THEN 1 END)
a> bの行をカウントする例として。
実際、最近のバージョンではcount(*)とcount(any not null column)の間に違いはなく、not nullを強調しています :-)偶然そのトピックをブログ投稿でカバーしています:Is count(col)better than count (*)?
Oracle8i Certified Professional DBA認定試験ガイド(ISBN 0072130601)の書籍の78ページには、COUNT(1)が実際にCOUNT(*)よりも速く実行されると書かれています。COUNT(*)を使用する場合は、少なくともNULL可能でない最初の列)。COUNT(1)はこれらのメカニズムをバイパスします。
MySQLは「tblnameのSELECT COUNT(1);」をごまかす MyISAMテーブルでは、テーブルカウントのテーブルヘッダーを読み取ります。InnoDBは毎回カウントします。
データベースに依存しない方法でCOUNT(1)がCOUNT(*)よりも速く実行されるかどうかをテストするには、次を実行し、実行時間を自分で判断します。
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
これにより、ストレージエンジンまたはRDBMSに関係なく、COUNT関数は同じレベルのプレイフィールドで動作します。
count(*)
使用します。