相关(SQL Server): Count(*) vs Count(1)
请告诉我性能有哪些(MySQL)?计数(*)还是计数(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)
所以真正的答案是他们总是相同。