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

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条回答 默认 最新

  • zqbnqsdsmd 2020-08-24 20:34
    已采纳
    打赏 评论
  • jingluan666 2020-08-24 18:04

    TB1里面也有个group by,能不能只用一个group by就解决问题

    打赏 评论

相关推荐 更多相似问题