limit的用法:
limit [offset], [rows]
其中 offset表示偏移量,rows表示需要返回的行数。
1 | offset limit 表中的剩余数据 |
1、执行原理
MySQL进行表扫描,读取到第 offset + rows条数据之后,丢弃前面offset条记录,返回剩余的rows条记录。
比如以下sql:
1 | select * from t30 order by id limit 10000, 10; |
这样总共会扫描10010条。
2、优化手段
如果查询的offset很大,避免直接使用offset,而是通过id到聚集索引中检索查找。
- 利用自增索引,如:
1 | select * from t30 where id > 10000 limit 10; |
当然,这也是会有问题的,如果id中间产生了非连续的记录,这样定位就不准确了。写到这里,篇幅有点长了,最后这个问题留给大家思考,感兴趣的朋友可以进一步思考探讨与延伸。