Bootstrap

mysql两张大表join优化_MYSQL 如何优化LEFF JOIN多张表的查询效率

MYSQL 如何优化LEFF JOIN多张表的查询效率

4327456264e04fde33c7fb2420a78224.png

个需求,就是N个表的各SUM求和,无什么语句,从效是没法提高的为数算没法避免。

给你几个参考建议:

左连接是没有必要的,你需要的其实就是不同表各自的sum,应该各自查询就好了

分开语句写,语句更精简

这样的需求,最好使用存储过程和循环语句,在需求上可以更灵活,可以查询任意天数和任意起始日期的数据

当数据量很多(天数积累),并且查询比较频繁的时候,应该引入“中间表”或“临时表”,表中每条记录记录一天的sum值(可以通过存储过程或者定时任务维护),这样再次查询会更有效率。

mysql 多表查询优化

5bc0440a6129e1d50fdd102e4190dafd.png

优化语句很简单:自定义函数帮您忙

先自定义一个函数,执行一次:

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 对于千万级的大表要怎么优化

d83779352fb7a2eb88a3a5f9315c8e9d.png

第一优化你的sql引

第二存,memcached,redis;

第三以上都做了后,还是就做主从复主主复制,读写,可以在应用层做,效率高,也可以用三方工具,第三方工具推荐360的atlas,其它的要么效率不高,要么没人维护;

第四如果以上都做了还是慢,不要想着去做切分,mysql自带分区表,先试试这个,对你的应用是透明的,无需更改代码,但是sql语句是需要针对分区表做优化的,sql条件中要带上分区条件的列,从而使查询定位到少量的分区上,否则就会扫描全部分区,另外分区表还有一些坑,在这里就不多说了;

第五如果以上都做了,那就先做垂直拆分,其实就是根据你模块的耦合度,将一个大的系统分为多个小的系统,也就是分布式系统;

相关标签推荐:

延展阅读:

;