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

标签 sql sql-server performance

只是想知道是否有人使用 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 月

Similar question on DBA.SE .

编辑,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/

相关文章:

sql - Postgres 优化插入/只读

sql-server - 如何为特定的 sql 查询设置超时?

sql-server - 动态创建临时表,插入临时表,然后选择

c++ - 通过 const 引用传递基本值真的会损害性能吗?

java - 限制 Publisher 中的预取

java - 用于 java derby 的 mysql 的 current_timestamp

SQL Server : large DB Query In Chunks

mysql - 在 varchar 字段的开头按字母顺序排列带有 "The"、 "A"、 "An"等的记录

sql - 截断 SQL varchar 列

performance - Scala隐式类型转换对性能有何影响?