超大分页怎么处理?
数据库
MySQL
官方
推荐
- 用id优化
先找到上次分页的最大ID,然后利用id上的索引来查询,类似于
select * from user where id>1000000 limit 100
这样的效率非常快,因为主键上是有索引的,但是这样有个缺点,就是ID必须是连续的,并且查询不能有where语句,因为where语句会造成过滤数据。
- 用覆盖索引优化
Mysql的查询完全命中索引的时候,称为覆盖索引,是非常快的,因为查询只需要在索引上进行查找,之后可以直接返回,而不用再回表拿数据.因此我们可以先查出索引的ID,然后根据Id拿数据.
select * from table where id in (select id from table where age > 20 limit 1000000,10)
- 在业务允许的情况下限制页数
建议跟业务讨论,有没有必要查这么后的分页啦。因为绝大多数用户都不会往后翻太多页。