优化MySQL查询(慢)

时间:2015-07-02 11:29:44

标签: mysql

有人可以帮我优化以下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测试但是我没有改善时间。有什么想法吗?

3 个答案:

答案 0 :(得分:0)

尝试此查询

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)

答案 1 :(得分:0)

这是您的查询:

ATT,A,ATTT

看起来很合理。因此,在彻底重写之前,您是否拥有以下索引:1,2,3SELECT 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)时,MySQL非常糟糕 - tab3(idtask, name)的10秒表明了很多数据。有什么办法可以减少数据的大小吗?桌子的大小有多大?结果集有多大?

如果您有大量数据,那么20秒可能并非不合理。

答案 2 :(得分:0)

看起来你是按字符串分组,所以你需要在name列上添加索引。加入MySQL表时必须始终使用索引