在mysql中更快,count(*)或count(table_field_name)?

时间:2011-09-22 13:29:53

标签: mysql

  

可能重复:
  COUNT(*) vs. COUNT(1) vs. COUNT(pk): which is better?

我想从select查询中检索计数。

什么更快:count(*)count(table_field_name)

我想知道哪种方式的性能更快。

2 个答案:

答案 0 :(得分:5)

差异是Count(field)返回字段中NOT NULL值的计数,COUNT(*)是否返回COUNT行。 MyIsam中的COUNT(*)应该更快 http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_count

答案 1 :(得分:0)

至少在MyISAM表count(*)上应该比count(fliedname)快,因为它允许mysql使用索引(主键最多次)来进行计数。如果给定的fieldname是主键,它就不会有任何区别。

使用*,mysql 不会如此转储以“加载整行的数据”,正如其他人所说的那样 - count(*)总是最快或最快的一个count(fieldname) 可能的选项会变慢,具体取决于给出的字段。

修改
the documantation说:

  

COUNT(*)经过优化,可以非常快速地返回[...]。此优化仅适用于MyISAM表

请阅读文档,了解有关此主题的更多信息。

重要说明: count(*)返回总行数,而count(fieldname)则返回给定字段不是NULL的行数。这在逻辑上是一致的,因为* mysql无法知道NULL - 遗漏的值。在执行count()时总会想到这一点,因为可能会对结果产生双重影响。