MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后放弃前 offset 行,返回 N 行,那当offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL改写。
我们可以先快速锁定需要获取的id段,然后再关联查询:
SELECT a.* FROM 表 1 a, (select id from 表 1 where 条件 LIMIT 100000,20 ) b where a.id=b.id
当limit 10,0000条数据时,查询耗时从0.46秒减少到了0.07秒:
当limit 100,0000条数据时,查询耗时从4秒减少到了0.5秒