从源码分析,MySQL优化器如何估算SQL语句的访问行数

💡 原文中文,约15000字,阅读约需36分钟。
📝

内容提要

本文分析了MySQL优化器的行数估算及其局限性,指出慢SQL的一个根本原因是代价估算不准确。通过源码解析,介绍了统计信息采集和实时下探的原理,并通过实际案例展示了如何定位和解决相关问题。建议增大采样页数或使用直方图以提高估算准确性。

🎯

关键要点

  • 慢SQL的一个根本原因是代价估算不准确。
  • MySQL优化器使用基于代价的CBO模型进行行数估算。
  • 逻辑优化和物理优化是SQL执行的两个步骤。
  • 代价计算模型只考虑CPU和IO两个维度。
  • 统计信息的准确性直接影响代价计算的准确性。
  • MySQL通过采样算法获取统计信息,采样页数越大,精度越高。
  • 实时下探是优化器在优化阶段实时访问索引以获取数据分布情况。
  • 行数估算有两种方式:使用统计信息和实时下探。
  • 统计信息不准确和更新延迟是MySQL行数估算的主要限制。
  • 通过实际案例展示了如何定位和解决慢SQL问题。
  • 建议增大采样页数或使用直方图以提高估算准确性。
➡️

继续阅读