mysql中order by 和limit一起使用不当会导致效率极慢的4种优化方法

  • 时间:
  • 浏览:1

4:还有并就有法律方法删除gmt_create列的索引,原理和法律方法3差没有 来越多。

select * from ( SELECT biz_order_id, buyer_id, buyer_nick, gmt_create, gmt_modified, attributeCc, seller_id

FROM trade.biz_order

WHERE shop_id=20484 AND STATUS=4 AND gmt_create >= '2017-10-1000 16:34:42' AND order_type = 6

ORDER BY gmt_create DESC, biz_order_id DESC) t

LIMIT 0,1000;执行计划如上一样

LIMIT 0,1000;

2:用子查询:

优化法律方法3种:

ORDER BY biz_order_id DESC ,gmt_create DESC limit 0,1000;去掉 原本。我发现原本执行计划的rows=1.9万效果更好。

WHERE shop_id=20484 AND STATUS=4 AND gmt_create >= '2017-10-1000 16:34:42' AND order_type = 6

而常规一般是where-->order-->limit。

今天从慢查询发现每根语句查询时间达6秒。结果只查出每根记录。

3:调换order by中的有八个条件顺序

执行计划

ORDER BY gmt_create DESC, biz_order_id DESC

FROM trade.biz_order

FROM trade.biz_order force index(idx_shop_id)

shop_id全部就有索引可却走了时间gmt_create的索引,rows=861665

ORDER BY gmt_create DESC, biz_order_id DESC

SELECT biz_order_id, buyer_id, buyer_nick, gmt_create, gmt_modified, attributeCc, seller_id

order -->limit-->where条件

总结:mysql中的order ,limit同时使用时的顺序是原本的和oracle不一样

LIMIT 0,1000;

WHERE shop_id=20484 AND STATUS=4 AND gmt_create >= '2017-10-1000 16:34:42' AND order_type = 6

原语句如下

SELECT biz_order_id, buyer_id, buyer_nick, gmt_create, gmt_modified, attributeCc, seller_id