mysql limit 大表优化

一个大表a 和另一个大表b 然后俩个表做了一下关联,比如要求每次取1w,结果查询到后面 :

比如 limit 90w,1w 越到后面越慢  出现原因:

俩个表做关联查询本身就产生临时表,且临时表较大,每次往后面分隔数据都相当于把前面的数据扫一遍,每次limit都在扫这个大的临时表。所以越往后越慢。

解决方式:

1.限制id,从id做分隔,视实际情况,如a的id 连续,b的里面有a的id主键,就可以从a做分隔,a.id>1and a.id <1w1 等等 

2.做子查询,如果a和b依靠某个条件关联,之后b满足的结果集较小就适合当前情况。

select a.xx,b.ttt from a left join b on a.id = b.a_id  where b.type=1 limit 1w,2w

比如b表的type=1 的就1w数据,那完全可以改造下

select a.xx,c.ttt from a left join (select ttt,a_id from b where type=1) as c on a.id= c.a_id limit 1w,2w

https://blog.csdn.net/mr253727942/article/details/46352085

猜你喜欢

转载自my.oschina.net/u/2337666/blog/1819897