摘要:不讨论引擎,在和引擎下的区别是基础的区别。如果索引记录不完全在缓冲池中,则处理选择语句需要一些时间。引擎以同样的方式处理和,两者没有性能差异。
不讨论 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://www.ucloud.cn/yun/22854.html
阅读 2081·2023-04-26 00:09
阅读 3083·2021-09-26 10:12
阅读 3425·2019-08-30 15:44
阅读 2849·2019-08-30 13:47
阅读 904·2019-08-23 17:56
阅读 3205·2019-08-23 15:31
阅读 455·2019-08-23 13:47
阅读 2480·2019-08-23 11:56