首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化MySQL查询(慢)

优化MySQL查询(慢)
EN

Stack Overflow用户
提问于 2015-07-02 19:29:44
回答 3查看 77关注 0票数 1

有人能帮我优化下面的MySQL查询吗?

代码语言:javascript
运行
复制
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秒才能执行。在没有组的情况下下降到10秒。我用DISTINCT进行了测试,但是我没能提高时间。有什么想法吗?

EN

回答 3

Stack Overflow用户

发布于 2015-07-02 19:33:21

尝试此查询

代码语言:javascript
运行
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2015-07-02 19:36:50

这是您的查询:

代码语言:javascript
运行
复制
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)

接下来,也许数据量太大了。当涉及到group by时,MySQL是相当糟糕的--对于group by来说,10秒意味着有很多数据。有没有什么方法可以减少数据的大小?桌子的大小是多少?结果集有多大?

如果你有大量的数据,那么20秒可能不是不合理的。

票数 0
EN

Stack Overflow用户

发布于 2015-07-02 19:39:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31183382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档