查询没有订购结果

时间:2013-08-15 00:47:57

标签: sql sqlite select limit

SELECT stuff FROM table LIMIT 0, 50

我正在重复此查询,同时将偏移量增加到50,直到我得不到更多结果。

每次结果的顺序是否相同?我不想使用ORDER BY,因为我不需要它们,所以它可能会不必要地降低性能。

我只是想确保无论顺序如何,它在查询之间保持不变,因此我不会在其他查询中获得重复记录。从我做的测试来看,我似乎没有......

2 个答案:

答案 0 :(得分:2)

您是对的,如果您未指定ORDER BY,则无法保证订单。对于你想要做的事,你应该指定一个显式的ORDER BY。

已编辑以反映评论

安娜,你是对的,如果你执行这一系列的查询

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
一百万次,你很有可能每次都得到相同的结果,但不能保证。

答案 1 :(得分:1)

如果您的表作为主键,则执行:

SELECT stuff
FROM table
ORDER BY pk
LIMIT 0, 50;

按主键排序应该是有效的。

在SQLite中,你也可以这样做:

SELECT stuff
FROM table
ORDER BY rowid
LIMIT 0, 50;

rowid是一个特殊的“列”,可用于与行的物理位置相关联的查询。按rowid排序也应该有效。