天天看点

count(1) 与count(*) 的性能比较【官网】

参考官网: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)