一、LIMIT的底层原理
1. LIMIT语法与基本行为
在MySQL中,LIMIT
子句用于限制查询结果的返回行数,常见形式为:
SELECT * FROM table LIMIT offset, count;
或:
SELECT * FROM table LIMIT count OFFSET offset;
其逻辑分为两步:
-
数据扫描:根据查询条件逐行扫描数据。
-
过滤结果:跳过前
offset
行,返回接下来的count
行。
2. 执行过程分析
-
无索引覆盖:若查询未命中索引,MySQL需要执行全表扫描,逐行跳过
offset
行,时间复杂度为O(offset + count)
。 -
索引覆盖:若查询可通过索引覆盖(如仅查询索引字段),则通过索引树快速定位起始点,时间复杂度可降至
O(count)
。
3. 性能瓶颈
当offset
值极大时(如LIMIT 1000000, 10
):
-
MySQL需遍历并丢弃前100万行数据。