1、分页查询优化
这种改写得满 足以下两个条件:
- 主键自增且连续 结果是按照主键排序的
- 连续主键排序的分页查询:
select * from employees limit 90000,5;
该 SQL 表示查询从第 90001开始的五行数据,没添加单独 order by,表示通过主键排序。我们再看表 employees ,因 为主键是自增并且连续的,所以可以改写成按照主键去查询从第 90001开始的五行数据
该 SQL 表示查询从第 90001开始的五行数据,没添加单独 order by,表示通过主键排序。我们再看表 employees ,因 为主键是自增并且连续的,所以可以改写成按照主键去查询从第 90001开始的五行数据
显然改写后的 SQL 走了索引,而且扫描的行数大大减少,执行效率更高。但是,这条改写的SQL 在很多场景并不实用,因为表中可能某些记录被删后,主键空缺,导致结果不一致
2、非主键字段排序的分页查询
select * from employees ORDER BY name limit