MySQL

洞悉MySQL底层架构与SQL调优本质
帅旋
关注
充电
IT宅站长,技术博主,共享单车手,全网id:arthinking。

从SQL执行原理看调优本质:limit offset, rows

发布于 2020-06-26 | 更新于 2024-02-24

limit的用法:

limit [offset], [rows]

其中 offset表示偏移量,rows表示需要返回的行数。

1
2
3
4
5
6
7
offset  limit  表中的剩余数据
_||_ __||__ __||__
| | | | |
RRRRRR RRRRRRRR RRR...
|______|
||
结果集

1、执行原理

MySQL进行表扫描,读取到第 offset + rows条数据之后,丢弃前面offset条记录,返回剩余的rows条记录。

比如以下sql:

1
select * from t30 order by id limit 10000, 10;

这样总共会扫描10010条。

2、优化手段

如果查询的offset很大,避免直接使用offset,而是通过id到聚集索引中检索查找。

  1. 利用自增索引,如:
1
select * from t30 where id > 10000 limit 10;

当然,这也是会有问题的,如果id中间产生了非连续的记录,这样定位就不准确了。写到这里,篇幅有点长了,最后这个问题留给大家思考,感兴趣的朋友可以进一步思考探讨与延伸。

References

本文作者: 帅旋

本文链接: https://www.itzhai.com/columns/mysql/sql/limit-offset.html

版权声明: 版权归作者所有,未经许可不得转载,侵权必究!联系作者请加公众号。

×
IT宅

关注公众号及时获取网站内容更新。