sqle icon indicating copy to clipboard operation
sqle copied to clipboard

Add new rule : Index merge

Open HuangWeiCen opened this issue 3 years ago • 0 comments

原始需求

  1. 内容: 支持SQL索引优化能力,如冗余索引、索引合并、索引效率检测、索引添加优化建议等
  2. 分类: SQL优化能力--SQL优化建议

当前需求

需要实现 “索引合并” 的功能

SQLE 规则

规则 提示 默认提示等级 需求备注 对应PR
索引合并 索引a和索引b可以合并为联合索引(a,b) notice 寻找可以合并为联合索引的独立索引 需求待确定

开发方案1

将索引合并理解为MySQL的 Index_merge, 根据 explain 结果输出对应的建议

实现步骤

  1. 获取sql的 explain 结果 image
  2. 根据 [type]是否等于 index_merge 判断是否触发索引合并
  3. 解析 [Extra] 中的内容, 取出合并了哪些索引, 索引合并时 [Extra]的内容会出现 unions(xx,xx), intersections(xx,xx), sort_union(xx,xx)中的一个, 括号中的内容即为被处理的索引
  4. 提示用户可以将这些索引改为联合索引

开发方案2

SQLE根据sql中是否有冗余索引给出合并索引的建议,例如idx1(a,b), idx2(a),将idx1,idx2合并

当前不确认的点

  1. 目前两个方案是否合理?
  2. 是否有其他理解?

HuangWeiCen avatar Jan 21 '22 09:01 HuangWeiCen