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

Tom*_*ski 24 mysql sql performance

相关(SQL Server): 计数(*)与计数(1)

你能告诉我性能有哪些(MySQL)吗?算(*)还是算(1)?

Ric*_*iwi 34

这是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;
Run Code Online (Sandbox Code Playgroud)

此优化仅适用于MyISAM表,因为为此存储引擎存储了精确的行数,并且可以非常快速地访问.对于诸如InnoDB之类的事务存储引擎,存储精确行计数更成问题,因为可能正在发生多个事务,每个事务都可能影响计数.


编辑

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

上述MyISAM优化同样适用于

COUNT(*)
COUNT(1)
COUNT(pk-column)
COUNT(any-non-nullable-column)
Run Code Online (Sandbox Code Playgroud)

所以真正的答案是它们总是一样的.

  • @zeusakm现在第三次运行它.你刚刚对缓存进行了基准测试! (27认同)