MYSQL 如何优化LEFF JOIN多张表的查询效率
个需求,就是N个表的各SUM求和,无什么语句,从效是没法提高的为数算没法避免。
给你几个参考建议:
左连接是没有必要的,你需要的其实就是不同表各自的sum,应该各自查询就好了
分开语句写,语句更精简
这样的需求,最好使用存储过程和循环语句,在需求上可以更灵活,可以查询任意天数和任意起始日期的数据
当数据量很多(天数积累),并且查询比较频繁的时候,应该引入“中间表”或“临时表”,表中每条记录记录一天的sum值(可以通过存储过程或者定时任务维护),这样再次查询会更有效率。
mysql 多表查询优化
优化语句很简单:自定义函数帮您忙
先自定义一个函数,执行一次:
create function fun_tb(@fClass varchar(50))
return @Mytable table
(
a varchar(50) ,
b char(30),
c varcher(20)
)
as
begin
insert into @Mytable
select * from (select a,b,c,date1 from biao1 where a=@fClass order by date1 limit 30)as t1
union all
select * from (select a,b,c,date1 from biao2 where a=@fClass order by date1 limit 30)as t1
union all
select * from (select a,b,c,date1 from biao3 where a=@fClass order by date1 limit 30)as t1
union all.....................
return
end
上面..............是省略你的30语句,你不能省
以后在程序中调用时,只要写:
select * from dbo.Mytable('已售')
就行了
MySQL 对于千万级的大表要怎么优化
第一优化你的sql引
第二存,memcached,redis;
第三以上都做了后,还是就做主从复主主复制,读写,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;
第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;
第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;
相关标签推荐:
延展阅读: