简短但很简单:在MySQL中,SELECT COUNT(fld) AS count FROM tbl
会比SELECT COUNT(*) AS count FROM tbl
更快,因为我理解*
是MySQL中的“all”选择器。
COUNT(*)
是否会选择所有行来计算一个计数,从而使SELECT(id)
之类的查询更便宜?或者这不重要吗?
答案 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
是一个聚合函数,通常每个选定行需要一个值。