小编典典

Count(*)vs Count(1)-SQL Server

sql

只是想知道您是否有人用光Count(1)Count(*),性能是否存在明显差异,或者这仅仅是过去的日子所养成的传统习惯?

具体的数据库是SQL Server 2005


阅读 186

收藏
2021-05-05

共1个答案

小编典典

没有区别。

原因:

在线书籍上说“ 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月

关于DBA.SE的类似问题

编辑,2011年12月

COUNT(*)ANSI-92中专门提到(请查找“ Scalar expressions 125”)

案子:

a)如果指定了COUNT(*),则结果为T的基数。

就是说,ANSI标准将其识别为明显的含义。 由于 这种迷信COUNT(1),RDBMS供应商对其进行了优化。否则将按照ANSI进行评估 __

b)否则,将TX设为单列表,这是对<T的每一行应用并消除空值的结果。如果消除了一个或多个空值,则会引发完成条件:warning-

2021-05-05