分页查询优化
通常我们使用偏移量进行查询
分页查询使用简单的 limit 子句就可以实现。limit格式如下:
SELECT * FROM 表名 LIMIT [offset,] rows
- 第一个参数指定第一个返回记录行的偏移量,注意从0开始;
- 第二个参数指定返回记录行的最大数目;
- 如果只给定一个参数,它表示返回最大的记录行数目;
如
SELECT * FROM user LIMIT 100,100 – 0s
SELECT * FROM user LIMIT 1000,100 – 0.0001s
SELECT * FROM user LIMIT 10000,100 – 0.003s
SELECT * FROM user LIMIT 100000,100 – 0.025s
SELECT * FROM user LIMIT 1000000,100 – 0.234s
偏移量优越大 查询时间越长
优化
拿到每次偏移量之后的id 然后 走主键索引
使用覆盖索引以及 子查询 进行查询到主键 然后走主键索引
SELECT * FROM
userWHERE id >= (SELECT id FROMuserLIMIT 1000000,1 ) LIMIT 100 – 0.1s左右 基本快一半
使用了id做主键比较(id>=),并且子查询使用了覆盖索引进行优化。