在MYSQL中,count(*)和count(1)哪个更好?

33 浏览
0 Comments

在MYSQL中,count(*)和count(1)哪个更好?

请问在性能上,Count(*)和Count(1)哪个更好?

0
0 Comments

在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引擎。

现在再运行一次。你刚刚对缓存进行了基准测试!

0