3.1 前置校验
首先根据经验规则,排除一些不支持通过添加索引来提高查询效率的场景,如查系统库的SQL,非select、update、delete SQL等。...值得注意的是,对于某些SQL,还需结合表结构才能准确地提取,比如:
select * from tb1, tb2 where a = 1,列a归属tb1还是tb2取决于谁唯一包含列a。...的所有索引组合是['A', 'B', 'C', 'AB', 'AC', 'BA', 'BC', 'CA', 'CB', 'ABC', 'ACB', 'BAC', 'BCA', 'CAB', 'CBA'],但还需排除一些索引才能得到所有的候选索引...但这样计算不适用某些场景,比如状态码字段,可能最多100个不同值。...但还是会出现无效的推荐,大致原因如下:
索引推荐计算出的Cost严重依赖样本数据的质量,在当表数据分布不均或数据倾斜时会导致统计数据出现误差,导致推荐出错误索引。