只是想知道你们中是否有人使用 Count(1)
而不是 Count(*)
以及性能是否存在明显差异,或者这只是过去几天提出的遗留习惯?
具体数据库为 SQL Server 2005
。
原文由 super9 发布,翻译遵循 CC BY-SA 4.0 许可协议
只是想知道你们中是否有人使用 Count(1)
而不是 Count(*)
以及性能是否存在明显差异,或者这只是过去几天提出的遗留习惯?
具体数据库为 SQL Server 2005
。
原文由 super9 发布,翻译遵循 CC BY-SA 4.0 许可协议
在所有 RDBMS 中,这两种计数方式在产生的结果方面是等价的。关于性能,我没有观察到 SQL Server 中的任何性能差异,但可能值得指出的是,某些 RDBMS, 例如 PostgreSQL 11,对于 COUNT(1)
的优化实现较少,因为它们检查参数表达式的可空性为可以在这个帖子中看到。
我发现运行时 1M 行有 10% 的性能差异:
-- Faster
SELECT COUNT(*) FROM t;
-- 10% slower
SELECT COUNT(1) FROM t;
原文由 Lukas Eder 发布,翻译遵循 CC BY-SA 4.0 许可协议
没有区别。
原因:
“1” 是一个非空表达式:所以它与
COUNT(*)
相同。优化器认清了它的本质:微不足道。与
EXISTS (SELECT * ...
或EXISTS (SELECT 1 ...
相同例子:
相同的 IO,相同的计划,作品
编辑,2011 年 8 月
DBA.SE 上的类似问题。
编辑,2011 年 12 月
COUNT(*)
在 ANSI-92 中特别提到(查找“Scalar expressions 125
”)也就是说,ANSI 标准认为它明显是你的意思。
COUNT(1)
由于 这种迷信,RDBMS 供应商已对其进行了优化。否则,它将根据 ANSI 进行评估