IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:query optimizer

共 3 篇相关文章

IT 累计浏览 2,193

MySQL数据库InnoDB存储引擎查询优化器实现的分析之统计信息

这篇深入分析了MySQL InnoDB存储引擎中查询优化器背后的“隐形大脑”——统计信息是如何工作的。作者没有停留在概念层面,而是直接切入InnoDB的核心实现:系统如何通过采样特定数量的数据页(默认采样20个叶子页)来估算表和索引的基数(Cardinality)。文章详细拆解了`ANALYZE TABLE`命令触发的统计信息更新流程,并揭示了`innodb_stats_transient_sample_pages`和`innodb_stats_persistent_sample_pages`参数在瞬时统计与持久化统计间的权衡。 关键点在于,这些并非精确的全表扫描结果,而是基于概率的估算。文章用具体例子说明了估算误差可能如何误导优化器,比如在数据分布极不均匀的字段上,选择次优索引甚至全表扫描。同时,它也指出了自动更新统计信息的时机(如表发生超过10%的数据变更)以及这对查询计划稳定性的影响。 读完能明白,优化一条慢SQL,除了看执行计划,理解其背后的统计信息来源是否准确、及时,往往是解开谜团的真正钥匙。

IT 累计浏览 3,189

MySQL数据库InnoDB存储引擎查询优化器实现的分析之多表简单JOIN查询

这篇文章深入分析了MySQL InnoDB存储引擎的查询优化器在处理多表简单JOIN时的核心决策逻辑。作者并非泛泛而谈,而是直接从优化器的源码实现切入,剖析了其如何基于成本模型,为一系列需要连接的表选择最优的执行顺序。 核心内容聚焦于优化器评估“哪个表先加入查询”的全过程。文章详细拆解了优化器计算每种连接顺序预估成本的关键步骤,包括对不同表访问方式(如全表扫描、使用特定索引)的I/O与CPU代价估算,以及如何根据这些估算动态调整候选顺序。其中,对优化器如何利用索引统计信息来规避最坏情况、选择高效连接路径的解读,揭示了其设计的精巧之处。 通过这篇分析,读者能清晰地看到,一个看似简单的JOIN查询背后,优化器是如何进行复杂的成本演算与路径选择的,这为理解MySQL的查询性能瓶颈和调优提供了坚实的底层视角。

IT 累计浏览 3,314

MySQL数据库InnoDB存储引擎查询优化器实现的分析之optimizer_search_depth参数

这篇讲的是 MySQL 优化器里一个看似不起眼,却对复杂查询性能有决定性影响的参数——`optimizer_search_depth`。作者深入到 InnoDB 引擎的实现层面,剖析了这个参数如何控制着优化器在寻找最优查询计划时的“探索深度”。我们平时可能遇到某些复杂联接查询执行异常缓慢的问题,根源有时就在于此。优化器并非全知全能,它需要一个边界来避免在庞大的搜索空间里陷入无止境的计算。文章的核心,就是解读这个深度阈值是如何被设定、调整,以及它背后的权衡逻辑。通过源码级的分析,揭示了在“计划质量”与“优化开销”之间取得平衡的一个关键实现细节,对于理解和调优高性能 SQL 查询很有启发。