MYSQL计数(*)或计数(1)有什么好处?

时间:2011-03-03 11:12:24

标签: mysql sql performance

  

相关(SQL Server): Count(*) vs Count(1)

请告诉我性能有哪些(MySQL)?计数(*)还是计数(1)?

1 个答案:

答案 0 :(得分:31)

这是MySQL的答案。

它们的表现完全相同 - 除非您使用MyISAM,否则存在COUNT(*)的特殊情况。无论如何,我总是使用COUNT(*)

http://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count

  如果SELECT从一个表检索,没有检索到其他列,并且没有WHERE子句,则

COUNT(*)被优化为非常快速地返回。例如:

mysql> SELECT COUNT(*) FROM student;
  

此优化仅适用于MyISAM表,因为为此存储引擎存储了精确的行数,并且可以非常快速地访问。对于像InnoDB这样的事务存储引擎,存储精确的行数更有问题,因为可能会发生多个事务,每个事务都可能影响计数。

<小时/>

修改

你们中的一些人可能错过了幽默的黑暗尝试。我宁愿将此作为一个非重复的问题保留在任何这样的日子,当MySQL将做与SQL Server不同的事情。所以我投了一票来重新打开这个问题(答案明确错误)。

上述MyISAM优化同样适用于

COUNT(*)
COUNT(1)
COUNT(pk-column)
COUNT(any-non-nullable-column)

所以真正的答案是他们总是相同。