1. ホーム
  2. sql

[解決済み】Count(*)とCount(1)の比較 - SQL Server

2022-03-23 20:37:04

質問

ただ、皆さんの中で Count(1) オーバー Count(*) それとも、過去から引き継がれてきたレガシーな習慣なのでしょうか?

具体的なデータベースは SQL Server 2005 .

解決方法は?

違いはありません。

理由

書籍のオンライン化 は"と言います。 COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } ) "

1"は非NULLの式なので、次の式と同じです。 COUNT(*) . オプティマイザはこれを「つまらないもの」と認識します。

と同じです。 EXISTS (SELECT * ... または EXISTS (SELECT 1 ...

SELECT COUNT(1) FROM dbo.tab800krows
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID

SELECT COUNT(*) FROM dbo.tab800krows
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID

同じIO、同じプラン、作品

2011年8月編集

DBA.SEでの類似の質問 .

2011年12月、編集

COUNT(*) には具体的に記載されています。 ANSI-92 (" を探します。 Scalar expressions 125 )

ケース

a) COUNT(*)が指定された場合,その結果はTの基数である。

つまり、ANSI規格では、何を言いたいのかが血判状になっていると認識されているのです。 COUNT(1) は、RDBMS ベンダーによって最適化されています。 というのも この迷信の そうでなければ、ANSIに従って評価されるはずです。

b) そうでない場合、TXを1列の表とする。 T の各行に <value expression> を適用した結果です。 を削除し、NULL値を排除する。1つ以上のNULL値が除去された場合 を削除した場合、完了条件として警告が発生します。