簡體   English   中英

優化MySQL查詢(慢)

[英]Optimize MySQL Query (Slow)

有人可以幫助我優化以下MySQL查詢嗎?

SELECT SUM(ROUND(rp.distance,2)), t.name, MONTH(tr.assigned)
FROM tab1 tr
JOIN tab2 rp ON rp.robot=tr.robot 
JOIN tab3 t ON t.idTask=tr.idTask
GROUP BY t.name, MONTH(tr.assigned)

查詢需要20秒才能執行。 沒有GROUP BY的話,最多10秒。 我在DISTINCT上進行了測試,但未能改善時間。 有任何想法嗎?

試試這個查詢

SELECT SUM(distance), t.name, MONTH(tr.assigned)
FROM tab1 tr
JOIN tab2 rp ON rp.robot=tr.robot 
JOIN (select ROUND(rp.distance,2) as distance, a.idTask from tab3 a) t ON t.idTask=tr.idTask
GROUP BY t.name, MONTH(tr.assigned)

這是您的查詢:

SELECT SUM(ROUND(rp.distance, 2)), t.name, MONTH(tr.assigned)
FROM tab1 tr JOIN
     tab2 rp
     ON rp.robot = tr.robot JOIN
     tab3 t
     ON t.idTask = tr.idTask
GROUP BY t.name, MONTH(tr.assigned);

看起來很合理。 因此,在徹底重寫之前,您是否具有以下索引: tab1(robot, idtask, assigned)tbl2(robot)tab3(idtask, name)

接下來,也許數據量太大。 MySQL是非常糟糕的,當涉及到group by - 10秒一group by提出大量的數據。 有什么方法可以減少數據大小? 桌子的大小是多少? 結果集有多大?

如果您有大量數據,那么20秒可能並不合理。

看起來您正在按字符串分組,因此您需要在name列上添加索引。 加入MySQL表時必須始終使用索引

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM