只是想知道您是否有人用光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的每一行应用并消除空值的结果。如果消除了一个或多个空值,则会引发完成条件:warning-