在MYSQL中,count(*)和count(1)哪个更好?
在MySQL中,使用COUNT(*)
和COUNT(1)
的效果完全相同,除非你使用的是MyISAM引擎,这时COUNT(*)
会有一种特殊情况。但是我总是使用COUNT(*)
。对于MyISAM表,如果SELECT
只从一个表中检索数据,没有检索其他列,并且没有WHERE
子句,COUNT(*)
会被优化为快速返回结果。因为MyISAM存储引擎存储了准确的行数,并且可以非常快速地访问。而COUNT(1)
只有在第一列被定义为NOT NULL
时才会受到相同的优化。
有些人可能没有注意到这是一个幽默的尝试。我希望保留这个问题,以防MySQL在某一天做出与SQL Server不同的事情。所以我投票重新打开这个问题(并给出一个明显错误的答案)。
上述MyISAM优化同样适用于以下情况:
COUNT(*) COUNT(1) COUNT(pk列) COUNT(任何非空列)
所以真正的答案是它们总是相同的。
对于一个拥有60万行数据的基准测试,结果如下:
mysql> select count(1) from users; +----------+ | count(1) | +----------+ | 596465 | +----------+ 1 row in set (5.89 sec)
mysql> select count(*) from users; +----------+ | count(*) | +----------+ | 596465 | +----------+ 1 row in set (0.10 sec)
使用InnoDB引擎。
现在再运行一次。你刚刚对缓存进行了基准测试!