我有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,如果那很重要的话。
编辑:不幸的是我不能利用可滚动光标。
除非您在 最外面的 查询中有订购依据,否则不做任何保证。
错误的SQL Server示例,但适用相同的规则。即使内部查询也不保证订单
SELECT * FROM ( SELECT * FROM Mytable ORDER BY SomeCol ) foo