从源码角度,深度解读 MySQL 优化器的 GROUP BY 优化策略

💡 原文中文,约14400字,阅读约需35分钟。
📝

内容提要

本文讨论了MySQL 8.0.22中GROUP BY的工作原理和查询优化器中的优化逻辑,介绍了四种GROUP BY的实现方式和优化建议,以及GaussDB(for MySQL)的兼容性和并行查询支持。

🎯

关键要点

  • MySQL 8.0.22 中 GROUP BY 的工作原理和优化逻辑
  • GROUP BY 允许用户依据列的值对结果集进行分组,通常与聚合函数结合使用
  • GROUP BY 的实现方式分为松散索引扫描、紧凑索引扫描、临时表和外部排序
  • 松散索引扫描利用索引扫描实现 GROUP BY,需满足特定条件
  • 紧凑索引扫描在符合最左前缀原则时使用索引,避免额外排序
  • 临时表用于存储中间结果,可能导致大量磁盘 I/O 操作
  • MySQL 8.0.13 及以后的版本不再支持 GROUP BY 的外部排序功能
  • 查询优化器决定如何执行 GROUP BY 查询,包括索引选择和临时表使用
  • GaussDB(for MySQL) 支持 GROUP BY 隐式排序和并行查询处理
  • 优化建议包括创建合适的索引、使用合适的聚合函数、优化查询结构和参数配置
  • 使用 ONLY_FULL_GROUP_BY 模式可提高查询的正确性和一致性
➡️

继续阅读