优化mysql使用order by导致执行效率低,出现Using temporary; Using filesort
1、Sql语句
2、去掉ORDER BY,效率提升
3、 给ORDER BY 加上索引,问题没有解决
上面的sql语句中,别名为a的表使用了两个字段,一个是外键PRODUCTONESORTVMID,一个是排序PUBLISH_DATE
两个字段分别加索引。查询结果,效率没有任何提升。
4、解决,给a表的两个字段加上联合索引,联合索引的顺序为PUBLISH_DATE在前面,PRODUCTONESORTVMID在后面
查询结果问题解决
执行计划,没有出现Using temporary; Using filesort
5、总结
如果将PRODUCTONESORTVMID放在前面,PUBLISH_DATE 在后面 则没有效果。所以建立联合索引时,排序的要在前面。原因大概是:
1、去掉连接查询,进行单表查询,效率提升(这里给PUBLISH_DATE 单独加索引)
在Mysql建立多列索引(联合索引)有最左前缀的原则,即最左优先。索引 PUBLISH_DATE在前面优先使用。如果PUBLISH_DATE相同,则再次比较PRODUCTONESORTVMID
至于where条件,外键的字段都加上索引,以上有不足,欢迎指出。共同进步
关于联合索引知识 :
https://www.cnblogs.com/wangkaihua/p/10220462.html