分页查询优化
普通分页
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;