SELECT stuff FROM table LIMIT 0, 50
我正在重复这个查询,同时将偏移量增加 50,直到我没有更多结果。
每次结果的顺序都会一样吗?我不想使用 ORDER BY 因为我不需要订购它们,所以它可能会不必要地降低性能。
我只是想确保无论订单是什么,它在查询之间保持不变,这样我就不会在其他查询中得到重复的记录。从我做的测试看来我没有...
您是对的,如果您不指定 ORDER BY,则无法保证订单。对于您想要做的事情,您应该指定一个明确的 ORDER BY。
编辑以反映评论
Anna,你是对的,如果你执行这个查询序列
SELECT stuff from table LIMIT 0, 50
SELECT stuff from table LIMIT 51, 50
SELECT stuff from table LIMIT 101, 50
... and so on ...
并且您不会在多个结果集中获得一行,这很幸运。
如果您重复查询
SELECT stuff from table LIMIT 51, 50
一百万次,你很有可能每次都会得到相同的结果,但不能保证。
如果您的表作为主键,请执行以下操作:
SELECT stuff
FROM table
ORDER BY pk
LIMIT 0, 50;
按主键排序应该是有效的。
在 SQLite 中,您还可以执行以下操作:
SELECT stuff
FROM table
ORDER BY rowid
LIMIT 0, 50;
rowid
是一个特殊的“列”,可用于与行的物理位置相关联的查询。订购rowid
也应该是有效的。