使用limit进行分页,翻到10000多页后效率低
原因
limit offset 会逐行查找,是先查询再跳过
优化思路
(1)从业务逻辑
不允许翻过100页,例如百度一般可以翻到70页左右
(2)技术上
select * from table limit 5000000,10 时就很慢了,大概需要4秒多
优化方法(1)
select * from table where id>5000000 limit 10;
这样就非常快,0.02s左右,因为使用了id索引
但这样用有前提,id是连续的,中间的数据不能删,否则id为5000000的并不是第5000000个记录
优化方法(2)
如果必须用limit offset查询,就用延迟关联
select id from table limit 5000000,10
这样只查询id列,实现了索引覆盖,就会很快
select t.* from table t inner join (select id from table limit 5000000,10) as tmp on t.id=tmp.id;
通过内连接再获取分页后每条记录的详细信息