我有SQL SELECT查询返回很多行,我必须将它分成几个分区.即,将max results设置为10000并迭代调用查询选择时间的行,并增加第一个结果(0,10000,20000).所有查询都在同一个事务中完成,我的查询所提取的数据在此过程中不会发生变化(但这些表中的其他数据可能会发生变化).
是否可以使用普通选择:
select a from b where...
Run Code Online (Sandbox Code Playgroud)
或者我必须使用选择使用顺序:
select a from b where ... order by c
Run Code Online (Sandbox Code Playgroud)
为了确保我将获得所有行?换句话说,是否保证没有order by的查询总是以相同的顺序返回行?
向查询添加顺序会显着降低查询的性能.
如果这很重要,我正在使用Oracle.
编辑:不幸的是我不能利用可滚动的光标.
如果没有order by子句,绝对不能保证顺序,但是你的结果是否具有确定性(除了顺序)将取决于where子句.例如,如果您有一个唯一的ID列,并且每次访问时,where子句都包含不同的过滤器范围,那么您将获得无序的确定性结果,即:
select a from b where ID between 1 and 100
select a from b where ID between 101 and 200
select a from b where ID between 201 and 300
Run Code Online (Sandbox Code Playgroud)
将返回不同的结果集,但订单不会得到任何保证.