MySql分页优化

70 阅读1分钟

分页查询优化

通常我们使用偏移量进行查询

分页查询使用简单的 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 user WHERE id >= (SELECT id FROM user LIMIT 1000000,1 ) LIMIT 100 – 0.1s左右 基本快一半

使用了id做主键比较(id>=),并且子查询使用了覆盖索引进行优化。