count(1) 与count(*) 的性能

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)

参考:
https://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_count

发布了121 篇原创文章 · 获赞 56 · 访问量 167万+

猜你喜欢

转载自blog.csdn.net/u013565163/article/details/100669640
今日推荐