繁体   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