2009-11-17 42 views
11

当使用COUNT函数编写SQL语句时,我有两个选择。COUNT SQL函数的性能

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

在性能方面,什么是最好的SQL语句? 使用选项1可以获得一些性能增益吗?

+0

SQL Server? MySQL的? – gbn 2009-11-17 11:00:17

+0

我正在使用MS SQL Server 2005 – 2009-11-17 11:41:07

回答

20

性能不应该的问题,因为他们做的2个不同的聚集

  • COUNT(*)为所有行,包括空值
  • COUNT(some_column_name),在排除了NULL “some_column_name

参见 “Count(*) vs Count(1)” 的问题更多

+2

它们在主键或非空列的情况下没有区别。 – Borys 2013-07-12 13:04:05

+0

@Borys:你会得到相同的数字。但主键会有一个索引=更好。 “非空列”列可能不是。当然,这可能并不重要,但通常情况是这样 – gbn 2013-07-12 13:22:53

2

不,Sql Server没有性能提升。

4

选项2实际上统计some_column_name不为空的所有字段。选项1计算任何字段不为空的所有字段。所以你可能会从这两个查询中得到不同的结果。大多数时候,你居然要计数所有行,然后最快的选项,不检查任何字段的时候,简直是SELECT COUNT(1) FROM ...

+1

请参阅此计数(*)与计数(1)http://stackoverflow.com/questions/1221559/ – gbn 2009-11-17 10:53:28

+0

计数(*)还计算所有行,而不是任何值的行不为空。就性能而言,Count(*)和Count(1)是相同的,因为查询优化器可以识别您正在尝试执行的操作并生成相同的执行计划。 – 2009-11-17 10:56:15