从源码分析,MySQL优化器如何估算SQL语句的访问行数
💡
原文中文,约15000字,阅读约需36分钟。
📝
内容提要
本文分析了MySQL优化器的行数估算及其局限性,指出慢SQL的一个根本原因是代价估算不准确。通过源码解析,介绍了统计信息采集和实时下探的原理,并通过实际案例展示了如何定位和解决相关问题。建议增大采样页数或使用直方图以提高估算准确性。
🎯
关键要点
- 慢SQL的一个根本原因是代价估算不准确。
- MySQL优化器使用基于代价的CBO模型进行行数估算。
- 逻辑优化和物理优化是SQL执行的两个步骤。
- 代价计算模型只考虑CPU和IO两个维度。
- 统计信息的准确性直接影响代价计算的准确性。
- MySQL通过采样算法获取统计信息,采样页数越大,精度越高。
- 实时下探是优化器在优化阶段实时访问索引以获取数据分布情况。
- 行数估算有两种方式:使用统计信息和实时下探。
- 统计信息不准确和更新延迟是MySQL行数估算的主要限制。
- 通过实际案例展示了如何定位和解决慢SQL问题。
- 建议增大采样页数或使用直方图以提高估算准确性。
➡️