【发布时间】:2016-02-13 05:44:43
【问题描述】:
我有返回很多行的 SQL SELECT 查询,我必须将它分成几个分区。即,将最大结果设置为 10000 并迭代调用查询选择时间的行,增加第一个结果(0、10000、20000)。所有查询都在同一个事务中完成,并且我的查询正在获取的数据在此过程中不会发生变化(但这些表中的其他数据可能会发生变化)。
只使用普通选择可以吗:
select a from b where...
或者我是否必须在 select 中使用 order by:
select a from b where ... order by c
为了确保我会得到所有的行?换句话说,是否保证没有order by的查询总是以相同的顺序返回行?
向查询添加 order by 会显着降低查询性能。
我正在使用 Oracle,如果这很重要的话。
编辑:不幸的是,我无法利用可滚动光标。
【问题讨论】:
-
始终如果您希望数据集排序,请使用 order by。如果存在性能问题,那就是另一个问题(检查索引、检查执行计划等等)。
-
为了性能:使用索引列作为 order by 子句或将索引应用于要在 order by 子句中使用的列
标签: sql