【问题标题】:Query that doesn't order results不排序结果的查询
【发布时间】:2013-08-15 00:47:56
【问题描述】:
SELECT stuff FROM table LIMIT 0, 50

我正在重复这个查询,同时将偏移量增加 50 直到我没有更多结果。

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

我只是想确保无论订单是什么,它在查询之间保持不变,这样我就不会在其他查询中得到重复的记录。从我做的测试看来我没有......

【问题讨论】:

  • 如果您将 ORDER BY 与具有索引的列一起使用(特别是主键始终被索引),性能影响是微不足道的。

标签: sql sqlite select limit


【解决方案1】:

您是对的,如果您不指定 ORDER BY,则无法保证订单。对于您想要做的事情,您应该指定一个明确的 ORDER BY。

已编辑以反映 cmets

安娜,你是对的,如果你执行这个查询序列

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

一百万次,你很有可能每次都得到相同的结果,但不能保证。

【讨论】:

  • 所以你是说我在查询中没有得到重复的结果是巧合?
  • 您能否重复查询一百万次并获得相同顺序的结果而不指定明确的顺序?可以,但不能保证。
【解决方案2】:

如果你的表作为主键,那么做:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多