SOAR(SQL Optimizer And Rewriter) 是一个对 SQL 进行优化和改写的自动化工具,目前由小米人工智能与云平台的数据库团队开发与维护。
特点:
- 跨平台支持(支持 Linux, Mac 环境,Windows 环境理论上也支持,不过未全面测试)
- 目前只支持 MySQL 语法族协议的 SQL 优化
- 支持基于启发式算法的语句优化
- 支持复杂查询的多列索引优化(UPDATE, INSERT, DELETE, SELECT)
- 支持 EXPLAIN 信息丰富解读
- 支持 SQL 指纹、压缩和美化
- 支持同一张表多条 ALTER 请求合并
- 支持自定义规则的 SQL 改写
下面这段代码是启发式规则的的元数据结构,它由规则代号,危险等级,规则摘要,规则解释,SQL示例,建议位置,规则函数等7部分组成。每一条SQL经过语法解析后会经过数百个启发式规则的逐一检查,命中了的规则将会保存在一个叫heuristicSuggest的变量中传递下去,与其他优化建议合并输出。这里最核心的部分,也是代码最多的部分在heuristic.go,里面包含了所有的启发式规则实现的函数。所有的启发式规则列表保存在rules.go文件中。
// Rule 评审规则元数据结构type Rule struct {Item string `json:"Item"` // 规则代号Severity string `json:"Severity"` // 危险等级:L[0-8], 数字越大表示级别越高Summary string `json:"Summary"` // 规则摘要Content string `json:"Content"` // 规则解释Case string `json:"Case"` // SQL示例Position int `json:"Position"` // 建议所处SQL字符位置,默认0表示全局建议Func func(*Query4Audit) Rule `json:"-"` // 函数名}
soar在语法支持方面,目前主要依赖vitess,TiDB对SQL语法的支持;数据库方面,目前仅针对MySQL语法族进行开发和测试,其他使用SQL的数据库产品暂不支持。