MYSQL 联表查询 ORDER 效率低?

今天在处理一个分页时候,发现速度感人,点下一页等了半天。然后查看代码,发现是一个left jion语句。

SELECT DISTINCT ordr.id,ordr.*,cf.nickname FROM order LEFT JOIN fans ON order.openid=fans.openid where order.mid=3 AND fans.mid=3 AND order.ispay="1" AND order.pay_way="alipay" ORDER BY order.paytime DESC,order.id DESC LIMIT 0,20

这条语句执行了2分钟。本来觉得是因为联表查询了多个数据的问题,经过测试,发现是order by排序数据量多的话就相当的慢。

经过百度,发现首先要将无用数据筛掉,筛选出符合条件的数据,减少资源消耗。

于是优化后的语句:

SELECT DISTINCT order.id,order.*,fans .nickname FROM (select * from order where ispay="1" ORDER BY paytime DESC,id DESC LIMIT 0,20) as order LEFT JOIN fans AS cf ON order.openid=fans.openid;

只需要时间: 0.888s

posted @ 2017-05-09 15:35  nicolovephp  阅读(761)  评论(0编辑  收藏  举报