前言
在我们业务表的数据量很大的时候,前端有一个分页查询的需求,如果分页很深的时候,如何优化查询速度
例如:我们系统有一张业务数据表,我们需要根据前端传过来的分页下标pageIndex和每页查询的数量pageSize两个参数以及其它的条件来查询这张业务表的里面的对应的数据并且返回给前端。
一、普通分页的优化方法
一般分页不是很深的情况下,我们一般可以通过以下方法解决大部分的分页问题
- 通过增加主键排序,例如:order by id
- 如果需要根据时间排序,就给常用的字段增加索引,包括时间字段。例如:order by create_time
以上两种手段其实可以解决大部分的分页问题了。但是如果后面的页数很深了,比如从100w条开始取20条,我们就会发现再执行sql语句就会非常慢,这是因为mysql的优化器在发现sql查询的行数超过一定比例的时候,就会自动转换成全表扫描,可以自己模拟数据测试一下。
二、什么是Mysql的深度分页?
查询偏移量过大的分页的场景我们称为深度分页,例如以下sql语句就是一个典型的深度分页场景
SELECT * FROM t_xxx ORDER