我只是想知道你们中是否有人使用Count(1)Count(*),在性能上是否有明显的差异,或者这只是一个过go 遗留下来的习惯?

具体数据库是SQL Server 2005.

推荐答案

没有区别.

原因:

Books on-line表示"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

同样的任务,同样的计划,同样的工作

编辑,2011年8月

Similar question on DBA.SE

编辑,2011年12月

COUNT(*)ANSI-92中特别提到(请看"Scalar expressions 125")

case :

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

也就是说,美国国家标准协会(ANSI)标准认为这是显而易见的.COUNT(1)已经被RDBMS供应商优化了,这是一种迷信.否则将按照ANSI标准进行判断

b) 否则,将TX设为作为

Sql相关问答推荐

需要解决办法通过传递过程参数而不是声明表行类型来声明表类型

提取Snowflake SQL中的嵌套键

如何在PostgreSQL中同时为id s列表执行多个update语句?'

如何更改函数返回的列名?

SQL—如何在搜索的元素之后和之前获取元素?

使用来自不同深度的嵌套组的值执行计算的干净方法?

通过对象分离实现原子性

需要使用SQLite查询进行一些奇怪的时间转换

Netezza SQL:判断两个表是否相同

将 json 列键映射到第二个表中的匹配列值

如何 for each id创建长度等于id长度的不同日期序列?

SQL Server中使用min()和max()从选定的特定值id表中删除不必要的时间

复制SQL Server临时表

SQL中如何转置表格 UNPIVOT是唯一的 Select 吗?

自动生成计算频率的列

如何显示最常引用条目的详细信息

SQL 函数 DIFFERENCE 返回有趣的分数

如何对 SQL 表中的连续时间戳进行分组?

PlSql 陷入死循环

Postgres 窗口函数未按预期工作