只是想知道是否有人使用 Count(1)
而不是 Count(*)
以及性能是否存在明显差异,或者这是否只是一个遗留问题过去的习惯是什么?
具体数据库为SQL Server 2005
。
最佳答案
没有区别。
原因:
Books on-line says "
COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )
"
“1”是一个非空表达式:因此它与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 月
编辑,2011 年 12 月
ANSI-92 中特别提到了COUNT(*)
(查找“标量表达式 125
”)
Case:
a) If COUNT(*) is specified, then the result is the cardinality of T.
也就是说,ANSI 标准将其视为显而易见的意思。由于这种迷信,COUNT(1)
已被 RDBMS 供应商优化。否则将按照 ANSI 进行评估
b) Otherwise, let TX be the single-column table that is the result of applying the <value expression> to each row of T and eliminating null values. If one or more null values are eliminated, then a completion condition is raised: warning-
关于sql - 计数(*) 与计数(1) - SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221559/