MySQL查询limit 0,100和limit 10000000,100有什么区别?
LIMIT 0, 100
和 LIMIT 10000000, 100
完全不一样。**
它们虽然最终都返回 100 条记录,但在性能、执行过程和对数据库造成的压力上有着天壤之别。
我们可以用一个生动的比喻来理解:
想象一下,你要从一本有 10,000,100 页的书中撕下 100 页。
LIMIT 0, 100
:从书的第一页开始撕,撕完100页就完成任务。 速度快,压力小。LIMIT 10000000, 100
:先从第一页开始数,数过前 10,000,000 页,然后才开始撕接下来的 100 页。 数这1000万页的过程极其缓慢且耗费资源。
详细对比
特性 | LIMIT 0, 100 | LIMIT 10000000, 100 | 说明 |
---|---|---|---|
执行过程 | 直接定位并读取前100条符合条件的数据。 | 必须先定位、扫描并临时丢弃前10,000,000条符合条件的数据。 | 核心区别所在 |
性能 | 极高。几乎是瞬间完成。 | 极低。随着 OFFSET 值的增大,性能呈线性下降,最终会非常慢。 | 性能差异巨大 |
资源消耗 (CPU, I/O, 内存) | 消耗很少的资源。 | 消耗巨大的资源。数据库需要执行大量的计算和磁盘读取来处理并丢弃这些临时数据。 | 对数 |