[英]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.