优化order by
查询影片 id 和描述信息,并根据主题进行排序,取出从序号 50 条开始的 5 条数据。
未优化的sql语句如下
select film_id,description from sakila.film order by title limit 50,5;
我们让order by的字段为主键索引,再看执行计划,大大提高了效率
select film_id,description from sakila.film order by film_id limit 50,5;
优化limit
假如我们要从数十万数百万条数据的某一行开始,取5条记录,这样一来IO操作会越来越大,所以接下来我们要记录上次查询的主键,下次查询时使用主键过滤。这样就避免了数据量大时扫描过多的记录
select film_id,description from sakila.film where film_id >600 and film_id<=605 order by film_id limit 1,5;
可以看到这样操作,检索的行数就只有5行了,不论是你从几千几万条数据开始。
k
说明:主键要顺序排序并连续的,如果主键中间空缺了某一列,或者某几列,会出现列出数据不足 5 行的数据;如果不连续的情况,建立一个附加的列 index_id 列,保证这一列数据要自增的,并添加索引即可