MySQL order by limit 走错索引(range->indexscan)

生产库遇到过好几例本文要讨论的案例,而且比较棘手。简而言之,有类似这样的查询 SELECT * FROM t1 where t1.f2>1 and t2.f2<100 order by t1.id,id是主键,条件里面有个range查询,就会造成优化器是选择主键,还是选择filesort问题,有些特殊情况就会选错索引,比如为了回避内存排序,选择了主键扫描,导致原本走范围过滤再sort 500ms勉强可以结束的查询,5分钟不出结果。 ...

2017-10-26 · 12 min

MySQL order by limit 走错索引(range->indexscan)

生产库遇到过好几例本文要讨论的案例,而且比较棘手。简而言之,有类似这样的查询 SELECT * FROM t1 where t1.f2>1 and t2.f2<100 order by t1.id,id是主键,条件里面有个range查询,就会造成优化器是选择主键,还是选择filesort问题,有些特殊情况就会选错索引,比如为了回避内存排序,选择了主键扫描,导致原本走范围过滤再sort 500ms勉强可以结束的查询,5分钟不出结果。 ...

2017-10-26 · 12 min