MySQL InnoDB引擎的count处理及count(*)和count(1)区别
不讨论 MyISAM
引擎,count
在 MyISAM
和 InnoDB
引擎下的区别是基础的区别。
文档地址: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)
,两者没有性能差异。
翻译自官方文档,肯定权威
原文地址:https://segmentfault.com/a/1190000009208277
相关推荐
-
vertical-aline与line-height 服务器
2020-6-28
-
pcl常用小知识 服务器
2019-3-15
-
dubbo zookeeper基本配置(单机),集群配置(多机) 服务器
2020-6-22
-
OpenSSL 入门:密码学基础知识 服务器
2020-5-25
-
MySQL中的锁之一:锁的必要性及分类 服务器
2019-3-17
-
OpenResty 社区王院生:APISIX 的高性能实践 服务器
2019-8-24
-
SolrJ 复杂查询 高亮显示 服务器
2019-5-10
-
【转载】为什么Mongodb索引用B树,而Mysql用B+树? 服务器
2020-6-27
-
[区块链] 密码学——椭圆曲线密码算法(ECC) 服务器
2019-9-10
-
部署SonarQube代码检测服务以及jenkins实现代码自动测试、自动部署 服务器
2019-9-9