MySQL InnoDB引擎的count处理及count(*)和count(1)区别

不讨论 MyISAM 引擎,countMyISAMInnoDB 引擎下的区别是基础的区别。

文档地址:https://dev.mysql.com/doc/ref...

图片描述

翻译:
InnoDB 引擎并不在一个表中保存行内计数,因为并发事务会在相同时间看到不同的行数。因此, SELECT COUNT(*) 语句只计算当前事务可见的行数。

MySQL 5.7.18 版本之前, InnoDB 引擎通过扫描聚簇索引来处理 SELECT COUNT(*) 语句,在 MySQL 5.7.18 版本中,如果存在一个更小的二级索引, InnoDB 会横向读取这个来执行 SELECT COUNT(*) 语句。

如果索引记录不完全在缓冲池中,则处理选择 SELECT(*) 语句需要一些时间。为了更快的计数,您可以创建一个计数器表,并让您的应用程序按插入和删除操作更新它。然而,这种方法在同一计数器表中启动成千上万个并发事务的情况下,可能无法很好地扩展。如果近似行计数足够,则可以使用 SHOW TABLE STATUS 语句。
InnoDB 引擎以同样的方式处理 SELECT COUNT(*)COUNT(1),两者没有性能差异。

翻译自官方文档,肯定权威

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值