COUNT(fld)比COUNT(*)快吗?

时间:2010-11-18 14:53:20

标签: sql mysql

  

可能重复:
  COUNT(id) vs. COUNT(*) in MySQL

简短但很简单:在MySQL中,SELECT COUNT(fld) AS count FROM tbl会比SELECT COUNT(*) AS count FROM tbl更快,因为我理解*是MySQL中的“all”选择器。

COUNT(*)是否会选择所有行来计算一个计数,从而使SELECT(id)之类的查询更便宜?或者这不重要吗?

3 个答案:

答案 0 :(得分:3)

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

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

count(*)仅计算记录数,因此不需要访问数据。

答案 1 :(得分:1)

SELECT COUNT(*) AS count FROM tbl

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

答案 2 :(得分:0)

  

*是MySQL中的“all”选择器

当您选择列时,这是正确的,*是整个列列表的快捷方式。

SELECT *变为SELECT foo, bar

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