小编典典

计数 (*) 与计数 (1) - SQL Server

all

只是想知道你们中的任何人是否Count(1)过度使用Count(*),性能是否存在明显差异,或者这是否只是过去几天提出的遗留习惯?

具体数据库是SQL Server 2005.


阅读 61

收藏
2022-06-20

共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 的每一行并消除空值的结果。如果消除了一个或多个空值,则会引发完成条件:警告-

2022-06-20