前言
在日常数据库运维过程中,绝大多数慢SQL产生的原因都是使用了不合理的索引,因此,索引优化是数据库性能优化的关键,尤其是MySQL这种不具备虚拟索引能力的数据库,更加依赖于索引推荐工具。 索引推荐作为一个较为古老的课题,在学术界与工业界都产生了不少优秀的作品,目前,例如SQLAdvisor、Soar、SQLess等等,本文将剖析这三种常见的索引推荐工具的内部原理。
基本信息
以下表格对比三种常见索引推荐工具的基本信息与索引推荐能力,对比所选用的是2024年3月的最新版本。
工具 | 发布时间 | 最近更新 | 开发语言 |
---|---|---|---|
SQLAdvisor | 2017年 | 2017.8 | C |
Soar | 2018年 | 2023.12 | Go |
SQLess | 2023年 | 2024.1 | Python |
原理剖析
本段落主要从源码角度剖析三种索引推荐工具的核心原理,并以流程图的形式进行展示,以下索引推荐工具均支持MySQL数据库。
SQL Advisor
SQLAdvisor 是一款 SQL 索引推荐工具,支持对用户输入SQL进行诊断优化,输出索引优化建议。 它基于 MySQL 原生词法解析,并基于DBA专家规则,结合 SQL 中的 where 条件以及字段选择度、聚合条件、多表 Join 关系等进行分析,输出最优索引优化建议,SQLAdvisor的核心原理如下图所示。
Soar
Soar,全称 SQL Optimizer And Rewriter,是一款由SQL 智能优化与改写工具,支持SQL改写、SQL审核、执行计划分析、索引推荐等多种丰富的SQL诊断优化功能,是一个非常优秀的索引推荐工具。其中,Soar的索引推荐能力基于DBA专家规则,结合数据库元数据信息、统计信息,综合进行诊断分析后输出最优的索引建议,其核心原理如下图所示:
SQLess
SQLess是一款SQL智能诊断优化产品,提供了贯穿研发、集成、运维和持续优化各个阶段的SQL闭环能力。在SQL优化层面,SQLess提供了基于DBA专家规则与基于代价模型的索引推荐能力,但优先对OceanBase进行了更多的适配,MySQL等数据库仅支持部分的索引推荐能力,整体而言,SQLess也是一个极具参考意义的索引推荐工具,SQLess的索引推荐原理如下图所示:
总结
索引推荐能力对于数据库产品而言是及其核心的能力,各大厂商研发了许多基于代价模型、以及基于AI的索引推荐工具,然后,索引推荐作为核心技术,往往难以被普通人所免费使用,本文所述的三种常见的免费索引推荐工具,具有较好的索引推荐能力,是比较稳定的免费索引推荐工具,适合广大用户安装使用。