参考官网:https://dev.mysql.com/doc/refman/8.0/en/aggregate-functions.html
count(1) 与count(*) 的性能
count(expr)
count聚合函数统计返回expr表达式值不为Null的行数,返回值为bigint。如果没有匹配到任何行数,则返回0。
但是count()又有些不同,count()整张表的行数,不论是否列为Null。
myIsam
myIsam存储引擎查询count()是非常快速的,因为myIsam独立维护一个值来存储表的记录数,所以统计行数的时候直接查询
这个值。
count(1)当表的第一列被定义为不允许为Null值时,count(1)与count()的性能是一样的。
innodb
mysql5.5开始使用innodb作为默认的存储引擎,我们来看下innodb下count(1)与count(*)的性能区别
直接撸下官方文档关于count聚合函数的说明。
innoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same way. There is no performance difference.
文档也说了,在innodb存储引擎中,count(1)与count(*)性能是一样的。
结论
innodb: count(*) = count(1) > count(主键) > count(col)
myisam: count(*) >= count(1) > count(col)