我是数据库的新手。我想在大表上使用实现分页,rowid
但我发现rowid
可以是字母数字,但不一定按任何顺序排列,所以我想知道我们是否可以使用它们对表进行分页。我想从中获取分页记录的表是一个非常大的表,有超过 20 亿条记录,如果我们根据偏移量和长度执行查询,则会出现错误 Ora1652 无法扩展表空间临时中的临时段. 那么有没有办法使用rowid
.
任何帮助将不胜感激提前谢谢你。
编辑:
假设我有一个表说LARGE_ROWS
有ID
两RANDOM
列,而ID
是主键列。
SELECT /*+ ordered use_nl(p s) */
*
FROM
(
SELECT
ROWNUM RN,
RD
FROM
(
SELECT
ROWID RD
FROM
large_rows
ORDER BY
large_rows.id
) T
WHERE
ROWNUM < 1000
) P,
large_rows S
WHERE
RN > 900
AND P.RD = S.ROWID;
你需要自己尝试多次跟随,看看你是否在正确的结果下获得了性能的任何改进。
我尝试了不同的方法,并且 Following 在我的案例中表现良好。
一个Rowid由
OOOOOOFFFBBBBBBRRR
O是object id,F是file id,B是block id,R是row number组成。从 11g 开始,引入了一些新机制。如果下一个rowid与当前行在同一个块中,则当前块可以被重用。因此,“一致得到”增加。我希望你能找到解决问题的方向。
干杯!!