mysql使用innodb引擎,请简述mysql索引的最左前缀如何优化order by语句

94 阅读1分钟

1.如果排序字段不在索引列上,filesort有两种算法:musql就要启用双路排序和单路排序(单路排序快一些)。

2.无过滤不索引。

3.order by 非最左filesort

4.顺序错了filesort

5.方向反了filesort

6.记不住多动手实验,熟练使用explain,必要时使用optimizer_trace

答案:

1.首先要对sql进行分析检测必要的查询字段,过滤字段,排序字段是否按顺序创建好了索引。

2.如果查询的字段不在索引中可能会产生回表操作导致filesort,降低性能。

3.一定要有过滤字段不然不能使用索引

4.排序字段和索引顺序不一致会导致filesort,降低性能。

5.多个字段排序时如果方向不一致会导致filesort,降低性能

6.使用explain观察查询类型和索引利用情况

7.尽可能减少不必要的filesort