shanxiaoshuai 2020-08-24 17:21 采纳率: 0%
浏览 309
已采纳

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
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求.net core 几款免费的pdf编辑器
  • ¥20 SQL server表计算问题
  • ¥15 C# P/Invoke的效率问题
  • ¥20 thinkphp适配人大金仓问题
  • ¥20 Oracle替换.dbf文件后无法连接,如何解决?(相关搜索:数据库|死循环)
  • ¥15 数据库数据成问号了,前台查询正常,数据库查询是?号
  • ¥15 算法使用了tf-idf,用手肘图确定k值确定不了,第四轮廓系数又太小才有0.006088746097507285,如何解决?(相关搜索:数据处理)
  • ¥15 彩灯控制电路,会的加我QQ1482956179
  • ¥200 相机拍直接转存到电脑上 立拍立穿无线局域网传
  • ¥15 (关键词-电路设计)