可能重复:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快吗?
短暂而简单:在MySQL,将一个SELECT COUNT(fld) AS count FROM tbl
比SELECT COUNT(*) AS count FROM tbl
更快,因为我明白*
是在MySQL中的 “所有” 选择。
是否COUNT(*)
选择所有行来计算计数,并因此使像SELECT(id)
这样的查询更便宜?或者它并不重要?
可能重复:
COUNT(id) vs. COUNT(*) in MySQLCOUNT(fld)比COUNT(*)更快吗?
短暂而简单:在MySQL,将一个SELECT COUNT(fld) AS count FROM tbl
比SELECT COUNT(*) AS count FROM tbl
更快,因为我明白*
是在MySQL中的 “所有” 选择。
是否COUNT(*)
选择所有行来计算计数,并因此使像SELECT(id)
这样的查询更便宜?或者它并不重要?
不,count(*)
比count(fld)
更快(在完全不同的情况下)。
count(fld)
必须考虑该字段中的数据,因为它计算所有非空值。
count(*)
只记录记录的数量,所以它不需要访问数据。
*
是在MySQL
“全”选择,当您选择列,其中*
是整个列列表中的快捷键是真的。
SELECT *
变成SELECT foo, bar
。
但是COUNT(*)
未扩展为COUNT(foo,bar)
,这在SQL中是无意义的。 COUNT
是一个聚合函数,通常每个选定行需要一个值。
SELECT COUNT(*) AS count FROM tbl
上面的查询甚至没有计算行,假设没有WHERE
子句,它直接从表缓存中读取。指定一个字段而不是*
会强制SQL实际对行进行计数,因此当没有WHERE
子句时使用*
会更快。
可能的重复:http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – 2010-11-18 14:56:57
http://stackoverflow.com/questions/1697137/countid-vs-count-in-mysql – bcmcfc 2010-11-18 14:57:04