MYSQL 如何优化LEFF JOIN多张表的查询效率
需求一个月内同一个name下面的SUM(x.eutra_fdd),篇幅只能放七天的,假如有三十天的表,有更好的办法吗?SELECTa.name,SUM(a.eutra_f...
需求一个月内同一个name下面的SUM(x.eutra_fdd),篇幅只能放七天的,假如有三十天的表,有更好的办法吗?
SELECT
a.name,
SUM(a.eutra_fdd),SUM(b.eutra_fdd),SUM(c.eutra_fdd),SUM(d.eutra_fdd),SUM(e.eutra_fdd),SUM(f.eutra_fdd),SUM(g.eutra_fdd)
from 201605010000 as a
LEFT JOIN 201605020000 as b
on a.name=b.name
LEFT JOIN 201605030000 as c
on a.name=c.name
LEFT JOIN 201605040000 as d
on a.name=d.name
LEFT JOIN 201605050000 as e
on a.name=e.name
LEFT JOIN 201605060000 as f
on a.name=f.name
LEFT JOIN 201605070000 as g 展开
SELECT
a.name,
SUM(a.eutra_fdd),SUM(b.eutra_fdd),SUM(c.eutra_fdd),SUM(d.eutra_fdd),SUM(e.eutra_fdd),SUM(f.eutra_fdd),SUM(g.eutra_fdd)
from 201605010000 as a
LEFT JOIN 201605020000 as b
on a.name=b.name
LEFT JOIN 201605030000 as c
on a.name=c.name
LEFT JOIN 201605040000 as d
on a.name=d.name
LEFT JOIN 201605050000 as e
on a.name=e.name
LEFT JOIN 201605060000 as f
on a.name=f.name
LEFT JOIN 201605070000 as g 展开
1个回答
展开全部
你这个需求,就是N个表的各自SUM求和,无论用什么语句,从效率上是没法提高的,因为数据运算没法避免。
给你几个参考建议:
左连接是没有必要的,你需要的其实就是不同表各自的sum,应该各自查询就好了
分开语句写,语句更精简
这样的需求,最好使用存储过程和循环语句,在需求上可以更灵活,可以查询任意天数和任意起始日期的数据
当数据量很多(天数积累),并且查询比较频繁的时候,应该引入“中间表”或“临时表”,表中每条记录记录一天的sum值(可以通过存储过程或者定时任务维护),这样再次查询会更有效率。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询