只是想知道你们中的任何人是否Count(1)过度使用Count(*),性能是否存在明显差异,或者这是否只是过去几天提出的遗留习惯?
Count(1)
Count(*)
具体数据库是SQL Server 2005.
SQL Server 2005
没有区别。
原因:
网上说“ COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )”
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
“1” 是一个非空表达式:所以它与COUNT(*). 优化器认清了它的本质:微不足道。
COUNT(*)
相同EXISTS (SELECT * ...或EXISTS (SELECT 1 ...
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”)
Scalar expressions 125
案子: a) 如果指定了 COUNT(*),则结果是 T 的基数。
案子:
a) 如果指定了 COUNT(*),则结果是 T 的基数。
也就是说,ANSI 标准认为它明显是你的意思。由于这种迷信COUNT(1),RDBMS 供应商已对其进行了优化。否则,它将根据 ANSI 进行评估
COUNT(1)
b) 否则,令 TX 为单列表,它是将 应用于 T 的每一行并消除空值的结果。如果消除了一个或多个空值,则会引发完成条件:警告-