Oracle

在 Oracle 12c 中,我們如何使用 rowid 在大表上實現分頁?

  • June 29, 2019

我是數據庫新手。我想在大型表格上實現分頁,rowid但我發現rowid可以是字母數字數字,不一定是任何順序,所以我想知道我們是否可以使用它們對錶格進行分頁。我想在分頁中獲取記錄的表是非常大的表,有超過 20 億條記錄,如果我們根據偏移量和長度執行查詢,則會出現錯誤 Ora1652 無法在表空間 temp 中擴展臨時段. 那麼有沒有辦法使用rowid.

任何幫助將不勝感激在此先感謝您。

編輯:

假設我有一個表說LARGE_ROWSIDRANDOM列,而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 與目前行在同一個塊中,則可以重用目前塊。因此,“一致獲得”增加。

我希望你能找到解決問題的方向。

乾杯!!

引用自:https://dba.stackexchange.com/questions/241674