sqle
sqle copied to clipboard
Add new rule : Index merge
原始需求
- 内容: 支持SQL索引优化能力,如冗余索引、索引合并、索引效率检测、索引添加优化建议等
- 分类: SQL优化能力--SQL优化建议
当前需求
需要实现 “索引合并” 的功能
SQLE 规则
规则 | 提示 | 默认提示等级 | 需求备注 | 对应PR |
---|---|---|---|---|
索引合并 | 索引a和索引b可以合并为联合索引(a,b) | notice | 寻找可以合并为联合索引的独立索引 | 需求待确定 |
开发方案1
将索引合并理解为MySQL的 Index_merge, 根据 explain 结果输出对应的建议
实现步骤
- 获取sql的 explain 结果
- 根据 [type]是否等于 index_merge 判断是否触发索引合并
- 解析 [Extra] 中的内容, 取出合并了哪些索引, 索引合并时 [Extra]的内容会出现 unions(xx,xx), intersections(xx,xx), sort_union(xx,xx)中的一个, 括号中的内容即为被处理的索引
- 提示用户可以将这些索引改为联合索引
开发方案2
SQLE根据sql中是否有冗余索引给出合并索引的建议,例如idx1(a,b), idx2(a),将idx1,idx2合并
当前不确认的点
- 目前两个方案是否合理?
- 是否有其他理解?