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

图片说明

回答

https://www.cnblogs.com/tianzong/p/10552182.html

以上是 mysql 对多表连接查询的结果进行gruop by导致的查询慢问题 的全部内容, 来源链接: utcz.com/a/40697.html

回到顶部