一个大表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