admin

如果我在不使用ORDER BY的情况下对SQL SELECT查询进行分区,结果是否具有确定性?

sql

我有SQL SELECT查询,该查询返回很多行,并且必须将其拆分为几个分区。即,将max
results设置为10000,并以递增的第一个结果(0,10000,20000)迭代调用查询选择时间的行。所有查询都在同一个事务中完成,并且查询过程中获取的数据没有更改(不过,这些表中的其他数据也可以更改)。

可以只使用普通选择吗:

select a from b where...

还是我必须在select中使用order by:

select a from b where ... order by c

为了确保我将得到所有行?换句话说,是否可以保证无顺序查询总是返回相同顺序的行?

在查询中添加order by会大大降低查询的性能。

我正在使用Oracle,如果那很重要的话。

编辑:不幸的是我不能利用可滚动光标。


阅读 204

收藏
2021-06-07

共1个答案

admin

除非您在 最外面的 查询中有订购依据,否则不做任何保证。

错误的SQL Server示例,但适用相同的规则。即使内部查询也不保证订单

SELECT
    *
FROM
    (
    SELECT
        *
    FROM
        Mytable
    ORDER BY SomeCol
    ) foo
2021-06-07