我想从select查询中检索计数。
什么更快:count(*)
或count(table_field_name)
?
我想知道哪种方式的性能更快。
答案 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()
时总会想到这一点,因为可能会对结果产生双重影响。