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

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

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

图片描述

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

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

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

翻译自官方文档,确定权威spa

相关文章
相关标签/搜索