一尘不染

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

sql

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

具体数据库是SQL Server 2005.


阅读 130

收藏
2022-05-18

共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 年 12 月

COUNT(*)ANSI-92中特别提到(查找“ Scalar expressions 125”)

案子:

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

也就是说,ANSI 标准认为它明显是你的意思。由于这种迷信COUNT(1),RDBMS 供应商已对其进行了优化。否则,它将根据 ANSI 进行评估

b) 否则,令 TX 为单列表,它是将 应用于 T 的每一行并消除空值的结果。如果消除了一个或多个空值,则提出完成条件:警告-

2022-05-18