mysql count(*)是否比count(specific_field)效率低得多?

时间:2012-08-17 19:52:50

标签: mysql sql

  

可能重复:
  COUNT() vs. COUNT(1) vs. COUNT(pk): which is better?
  count(
) and count(column_name), what's the diff?
  count(*) vs count(column-name) - which is more correct?

在select语句中使用count(*)的好处是我可以将它与任何表一起使用,这使脚本自动化更容易:

count_sql = 'select count(*) ' + getRestOfSQL('tablename');

但是,它效率低于使用count(specific_field)吗?

2 个答案:

答案 0 :(得分:2)

对于InnoDB

如果specific_field不可为空,则它们是等效的并具有相同的性能。

如果specific_field可以为空,那么他们就不会做同样的事情。 COUNT(specific_field)计算非空值specific_field的行。这需要查看每行specific_field的值。 COUNT(*)只计算行数,在这种情况下可以更快,因为它不需要检查specific_field的值。

对于MyISAM

以下内容有一个特殊优化,因此它甚至不需要获取所有行:

SELECT COUNT(*) FROM yourtable

答案 1 :(得分:1)

一般来说,这并不重要,因为我们返回相同数量的行。

此链接很好地涵盖了它

此链接还解释了更多内容specifically with Oracle