MySQL-07丨分页查询优化

Posted by jiefang on October 28, 2019

分页查询优化

普通分页

1
select a,b,c from t1 limit 10000,10;

从表中查询从10001行开始的记录,看似只查询了10行,实际读取了10010条记录,然后抛弃前10000行,读取最后的10行,执行效率很低。

  • 根据自增且连续主键排序的分页查询
  • 根据非关键字段排序的分页查询

根据自增且连续主键排序的分页查询

1
select  * from t1 limit 99000,2;

查询从99001开始的2行数据,没添加单独的order by,表示通过主键排序。

1
select * from t1 where id > 99000 limit 2;

满足条件:

  • 主键自增且连续;
  • 结果按照主键排序;

根据非关键字段排序的分页查询

1
select * from t1 order by a limit 99000,2;

扫描整个索引并查找到没索引的行的成本比扫描全表的成本更高,优化器放弃使用索引。

1
select * from t1 inner join (select id from t1 order by a limit 99000,2)g on t1.id = g.id;