MySQL 中 `LIMIT 100000000, 10` 和 `LIMIT 10` 的执行速度是否相同?
MySQL 中 LIMIT 100000000, 10 和 LIMIT 10 的执行速度是否相同?
回答重点
速度差很多,limit 10 快很多!
原因如下:
1)LIMIT 100000000, 10 需要先处理(通常是读取并跳过)前 100000000 条记录,然后再获取到需要的 10 条记录,开销成本很大,因为需要扫描 100000000 数据才能得到后面的 10 条数据,会导致大量的磁盘 I/O。
2)LIMIT 10 从结果集第一个记录开始扫描直接返回前 10 条记录。
通常面对LIMIT 100000000, 10这种大分页的情况,可以先使用条件过滤掉,比如使用主键 ID 来进行范围过滤,然后再 limit 10。
示例代码如下:
1 | SELECT * FROM users WHERE id > 100000000 ORDER BY id LIMIT 10; |
不过这种方式要运用在有递增关系的列条件上。
扩展知识
Comments