COUNT SQL函数的性能表现

17

当我在写带有COUNT函数的SQL语句时,有两个选择。

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

就性能而言,哪种SQL语句最优? 使用第一种选项,我能获得一些性能提升吗?


我正在使用 MS SQL Server 2005。 - Upul Bandara
3个回答

25

性能应该不重要,因为它们执行2个不同的聚合函数

  • COUNT(*) 是所有行,包括 NULL 值
  • COUNT(some_column_name),排除了 "some_column_name" 中的 NULL 值

查看 "Count(*) vs Count(1)" 问题了解更多信息


4
无论是主键还是非空列,在这方面它们并没有区别。 - Borys
@Borys:你会得到相同的计数。但是主键将具有索引=更好。而“非空列”列可能没有。当然,这可能无关紧要,但通常情况下会有影响。 - gbn

4

选项2实际上计算的是所有字段中some_column_name不为空的记录数。选项1计算的是任何字段不为空的记录数。因此,这两个查询可能会得到不同的结果。大多数情况下,您实际上想要计算所有行,最快的选项是不检查任何字段,只需使用SELECT COUNT(1) FROM ...


Count()会计算所有行,而不仅仅是那些值不为空的行。就性能而言,Count()和Count(1)是相同的,因为查询优化器会识别你要做什么,并生成相同的执行计划。 - Maximilian Mayerl

1

不,Sql Server 中没有性能提升。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接