优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

1、Sql语句

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

2、去掉ORDER BY,效率提升

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

 

3、 给ORDER BY 加上索引,问题没有解决

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

上面的sql语句中,别名为a的表使用了两个字段,一个是外键PRODUCTONESORTVMID,一个是排序PUBLISH_DATE

两个字段分别加索引。查询结果,效率没有任何提升。

 

4、解决,给a表的两个字段加上联合索引,联合索引的顺序为PUBLISH_DATE在前面,PRODUCTONESORTVMID在后面

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

查询结果问题解决 

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

执行计划,没有出现Using temporary; Using filesort优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

5、总结

如果将PRODUCTONESORTVMID放在前面,PUBLISH_DATE 在后面 则没有效果。所以建立联合索引时,排序的要在前面。原因大概是:

1、去掉连接查询,进行单表查询,效率提升(这里给PUBLISH_DATE 单独加索引)

优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort

在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先。索引 PUBLISH_DATE在前面优先使用。如果PUBLISH_DATE相同,则再次比较PRODUCTONESORTVMID

至于where条件,外键的字段都加上索引,以上有不足,欢迎指出。共同进步

 

关于联合索引知识 :

https://www.cnblogs.com/wangkaihua/p/10220462.html