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