MySQL优化之limit和order by

优化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 列,保证这一列数据要自增的,并添加索引即可

发布了568 篇原创文章 · 获赞 180 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/Delicious_Life/article/details/105609778