Oracle
在 Oracle 12c 中,我們如何使用 rowid 在大表上實現分頁?
我是數據庫新手。我想在大型表格上實現分頁,
rowid
但我發現rowid
可以是字母數字數字,不一定是任何順序,所以我想知道我們是否可以使用它們對錶格進行分頁。我想在分頁中獲取記錄的表是非常大的表,有超過 20 億條記錄,如果我們根據偏移量和長度執行查詢,則會出現錯誤 Ora1652 無法在表空間 temp 中擴展臨時段. 那麼有沒有辦法使用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 提供了良好的性能。
DROP TABLE STUDENT; CREATE TABLE student (RNO NUMBER, NAME VARCHAR2(1000)); -- I have just added 2,000,000 records INSERT INTO STUDENT SELECT LEVEL, 'STUDENT - ' || LEVEL FROM DUAL CONNECT BY LEVEL <= 2000000; -- selecting the 10th page of length 100 each SELECT /*+ ordered use_nl(p s) */ * FROM ( SELECT ROWNUM RN, RD FROM ( SELECT ROWID RD FROM STUDENT ORDER BY RNO ) T WHERE ROWNUM < 1000 ) P, STUDENT S WHERE RN > 900 AND P.RD = S.ROWID;
A Rowid 由
OOOOOOFFFBBBBBBRRR
O 是對象 id,F 是文件 id,B 是塊 id,R 是行號。從 11g 開始,引入了一些新機制。如果下一個 rowid 與目前行在同一個塊中,則可以重用目前塊。因此,“一致獲得”增加。我希望你能找到解決問題的方向。
乾杯!!