2012-01-13 58 views
1

可能重复:
In SQL, what's the difference between count(column) and count()?
Count(
) vs Count(1)SQL让行计数优化

我有保留,例如电子邮件内容或新闻长文大表。我的问题是 有计数表行的任何性能差异:

SELECT COUNT(*) FROM table_name 

SELECT COUNT(t.id) FROM table_name as t 

哪一个更好?或后者将通过查询优化器进行优化?有没有关于这方面的文件?

+1

假设'id'是一个非空的列(看起来像PK)。他们应该在任何像样的DBMS中一样 – 2012-01-13 15:19:39

+4

@juergend - COUNT(*)和COUNT(1)是同义词。但COUNT(id)具有不同的行为。 – MatBailie 2012-01-13 15:23:09

回答

2

它们是不同的。

COUNT(*)会检索所有的值(甚至是NULL值计算)。 COUNT(t.id)不计算NULL值。


就性能而言,它们是相同的(查询优化器是智能的)。

+1

就性能而言,它们仅在不可空列中明确相同。如果列不可为空,则QO可以选择不甚至含有指定列或窄指数(MySQL的 - 不记得是哪存储引擎)使用的缓存值,不需要一个表的访问的。 – 2012-01-13 15:24:42

1

查询计划看起来是一样的,但在测试中,使用*更快(略)。

虽然指定列名称时未考虑空值。