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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值