为什么在MySQL或MariaDB中SELECT COUNT(*) FROM TABLE有时会非常慢

为什么在MySQL或MariaDB中SELECT COUNT(*) FROM TABLE有时会非常慢

💡 原文英文,约3700词,阅读约需14分钟。
📝

内容提要

本文讨论了MySQL中SELECT COUNT(*) FROM TABLE查询速度慢的原因,包括明显和不明显的因素。明显的原因有表大小、存储引擎和并发工作负载,不明显的原因有MySQL变体和版本、事务上下文和表碎片化。文章还提到了MySQL和MariaDB版本之间的差异以及不同事务上下文中查询速度的差异。此外,还讨论了MySQL 8.0中并行读取线程和数据文件创建方式对查询结果的影响。总的来说,事务上下文对查询速度有重要影响,需要仔细考虑。

🎯

关键要点

  • SELECT COUNT(*) 查询速度慢的原因包括明显和不明显的因素。

  • 明显的原因有表大小、存储引擎、并发工作负载和内存缓存与磁盘读取的差异。

  • 不明显的原因包括 MySQL 变体和版本、事务上下文、表碎片化、并行读取和表优化。

  • MySQL 和 MariaDB 版本之间存在差异,不同事务上下文中查询速度也不同。

  • MySQL 8.0 中的并行读取线程和数据文件创建方式对查询结果有影响。

  • 事务上下文对查询速度有重要影响,特别是在存在未提交数据时。

  • 不同版本的 MySQL 和 MariaDB 在处理相同查询时表现差异显著。

  • MySQL 5.7 版本在某些上下文中表现较慢,而 MySQL 8.0 在某些版本中也存在性能回归。

  • MariaDB 的新版本在存在撤销日志条目时查询速度较慢。

  • MySQL 8.0.20 及以后的版本在并行读取时可能导致更多的磁盘读取,影响查询性能。

➡️

继续阅读