最近我发现 MySQL 有一个offset
特性。我一直在尝试查找有关偏移结果的文档,或者偏移量和限制变量之间的差异,但我似乎找不到我要找的东西。
假设我在一个表中有 10.000 行,我想要 25 个结果,来自第 1.000 行。就我目前为止,我可以同时做这两个以获得相同的结果:
SELECT id,name,description FROM tablename LIMIT 1000,25
SELECT id,name,description FROM tablename LIMIT 25 OFFSET 1000
我想知道的是两者之间的区别。
- 这实际上是这样做的还是我的理解有误?
- 在较大的表中慢/快
- 当我这样做时,偏移量的结果是否会改变
WHERE column=1
(比如列有 >100 个不同的值) - 当我这样做时偏移的结果是否会改变
ORDER BY column ASC
(假设它具有随机值)
我感觉偏移量跳过了在数据库中找到的前 X 行,而忽略了排序和位置。
在操作上
陈述绝对没有区别
siride的评论:
正是重点。
来自同一个文档
您的实际问题
由于两个查询相同,因此没有区别
使用
LIMIT
不会更改任何结果集。他们只是在结果集中导航。这个查询
会不同于
因为 LIMIT 是在不同的阶段应用的。
如果 tablename 的行数少于 1000,则第一个查询不返回任何内容
如果子查询的行数少于 1000,则第二个查询不返回任何内容
结论
您将不得不雕刻查询以确保您在正确的阶段对数据进行排序