shanxiaoshuai
shanxiaoshuai
采纳率66.7%
2020-08-24 17:21

mysql 对多表连接查询的结果进行gruop by导致的查询慢问题

已采纳

先写sql语句如下:

SELECT

TB1.PRODUCT_CODE, TB1.COUNT,sum(TB2.PRODUCT_COUNT) as PC1, sum(TB4.PRODUCT_COUNT) as PC2

from

(SELECT PRODUCT_CODE, SUM(PRODUCT_COUNT) AS COUNT
from GYS_Warehouse_Detail
where GYS_ID = 6 and PRODUCT_COUNT > 0.0
GROUP BY PRODUCT_CODE
ORDER BY PRODUCT_CODE) TB1

LEFT JOIN Purchase_Order_Detail TB2 ON TB2.PRODUCT_CODE = TB1.PRODUCT_CODE

LEFT JOIN Purchase_Order_Lists TB3 ON TB3.ID = TB2.ORDER_ID

LEFT JOIN Order_Detail TB4 ON TB4.PRODUCT_CODE = TB1.PRODUCT_CODE

LEFT JOIN Order_Lists TB5 ON TB5.ID = TB4.ORDER_ID

WHERE TB3.STATUS < 5 AND TB5.STATUS < 3
GROUP BY TB1.PRODUCT_CODE
LIMIT 0,15
;

执行时间大约5秒多,explain的结果如图

explain

考虑过加索引,加索引以后的explain结果显示行数优化了很多,但是执行时间变为20多秒。。。

explain2

感觉真正耗时间的是最后的gruop by,使用了using temporary和using filesort。

gruop by前的数据一共八万多条。

在gruop by的过程中是不是将八万条数据全部加载到内存形成临时表然后排序,,所以加了索引反而更慢,因为要加载到内存的数据变多了。。。各位大佬有什么办法吗?

图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

相关推荐