2010-11-18 117 views
2

可能重复:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快吗?

短暂而简单:在MySQL,将一个SELECT COUNT(fld) AS count FROM tblSELECT COUNT(*) AS count FROM tbl更快,因为我明白*是在MySQL中的 “所有” 选择。

是否COUNT(*)选择所有行来计算计数,并因此使像SELECT(id)这样的查询更便宜?或者它并不重要?

+2

可能的重复:http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – 2010-11-18 14:56:57

+1

http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – bcmcfc 2010-11-18 14:57:04

回答

3

不,count(*)count(fld)更快(在完全不同的情况下)。

count(fld)必须考虑该字段中的数据,因为它计算所有非空值。

count(*)只记录记录的数量,所以它不需要访问数据。

0

*是在MySQL

“全”选择,当您选择列,其中*是整个列列表中的快捷键是真的。

SELECT *变成SELECT foo, bar

但是COUNT(*)未扩展为COUNT(foo,bar),这在SQL中是无意义的。 COUNT是一个聚合函数,通常每个选定行需要一个值。

1
SELECT COUNT(*) AS count FROM tbl 

上面的查询甚至没有计算行,假设没有WHERE子句,它直接从表缓存中读取。指定一个字段而不是*会强制SQL实际对行进行计数,因此当没有WHERE子句时使用*会更快。

相关问题