count(*)和count(1)那个更好呢?网上有很多,其中一种说法是count(1)好,因为少了一次转换。
我这里给出的结论不一定就是正确答案,仅供参考。
没有差别,但推荐count(*)。
我的依据是MySQL官方文档上说没有性能差异。
same way,no perfomance difference
不同的存储引擎优化也有差异。
MYISAM引擎对count的优化
在MYISAM引擎因为不支持事务,做了一个简单的优化,就是把表的总行数单独记录下来了。在没有where条件的情况下,直接使用这个值。这样速度就很快啦。
InnoDB引擎对count的优化
因为事务的原因,不能使用MYISAM引擎的方法。但是在8.0.13开始针对count扫描表的成做了一些优化,但是不能带有where和group by。它会选择最小的非聚簇索引来扫表。
例如:
select count(*) from noindex ;
表t有索引,那么会使用a的索引信息进行优化