oracle全文索引之幾個關鍵表
oracle全文索引的原理是把對索引的查詢轉換成對幾個表的查詢。下面對幾個主要的表進行簡單介紹:
DR$INDEX_NAME$I:
該表的owner是基表所屬的schema。
這個表包含了所有的關鍵字和其對應的位置資訊。這是全文索引最主要的表,通常也是全文索引中最大的表。
Name Type
----------- ------------
TOKEN_TEXT VARCHAR2(64) --標識字元,也就是關鍵字。它是根據oracle根據索引對應的語法分析器生成的。
TOKEN_TYPE NUMBER(3)
TOKEN_FIRST NUMBER(10) --當前關鍵字(詞)對應的最小docid
TOKEN_LAST NUMBER(10) --當前關鍵字(詞)對應的最大docid
TOKEN_COUNT NUMBER(10) --關鍵字在當前docid範圍內有多少個滿足條件的docid
TOKEN_INFO BLOB --記錄關鍵字對應的位置資訊(估計記錄了關鍵字對應的DR$INDEX_NAME$R中ROW_NO資訊、關鍵字對應的DOCID)
DR$INDEX_NAME$K:
該表的owner是基表所屬的schema。
這個表主要對映docid和rowid的關係。docid是全文檢索的概念,它相當於表的一個條目。被全文檢索索引的每一行都對應一個docid,也就是說一個rowid對應一個docid。
它一般用於根據rowid,取docid的查詢。
Name Type
------- ----------
DOCID NUMBER(38)
TEXTKEY ROWID
DR$INDEX_NAME$R:
該表的owner是基表所屬的schema。
這個表主要用來完成根據docid查詢rowid的操作。這個表一般只有22行。
這個表的DATA欄位存的都是rowid,它是一個rowid的集合。由於rowid的長度都是固定的(18位),而docid是一個邏輯概念,它是根據序列順序增長的,所以可以根據這個讀取docid對應的rowid。
如doc=1時,取blob的前18位就是doc=1時對應的rowid;當docid=2時,取blob的19-36位就是docid=2對應的rowid。
docid=N時,其對應的rowid=Substr(DATA_ROWID,(N*18)+1,18) ,其中DATA_ROWID是根據DR$INDEX_NAME$R表的DATA欄位經過一定規則轉換的資料。(目前不清楚轉換規則)
為了避免DR$INDEX_NAME$R表中的單行長度太大,oracle在初始時把DR$INDEX_NAME$R分成了22行。這個數量是會變化的,如果資料量增長非常大,DR$INDEX_NAME$R的行數也會增多。
Name Type
------ ---------
ROW_NO NUMBER(3) --行號
DATA BLOB --儲存rowid集合
DR$INDEX_NAME$N:
該表的owner是基表所屬的schema。
這個表用來儲存被刪除的docid的資訊。在最佳化域索引時會使用並刪除這些資訊。
Name Type
--------- ----------
NLT_DOCID NUMBER(38) --docid
NLT_MARK CHAR(1) --N 表示新產生的無效docid;M表示正在被最佳化的docid
DR$PENDING:
該表的owner是基表所屬的ctxsys。
儲存insert和update操作產生的新資料。在索引同步時會被用到這些資料,同步完成後這些資料會被刪除。
在該表(PND_CID, PND_PID, PND_ROWID)組成一個主鍵。
Name Type
--------------- -------
PND_CID NUMBER --index_id
PND_PID NUMBER --這個不知道代表什麼?
PND_ROWID ROWID --對應記錄的rowid
PND_TIMESTAMP DATE
PND_LOCK_FAILED CHAR(1)
DR$WAITING:
該表的owner是基表所屬的ctxsys。
我們知道,表DR$DEPENDING的(PND_CID, PND_PID, PND_ROWID)必須唯一,而(PND_CID, PND_PID, PND_ROWID)唯一標識一個被插入或者更新的記錄。
當插入一條記錄後,會在DR$DEPENDING產生一條記錄。在沒有同步索引的情況下更新該記錄,也會產生一條記錄來記錄更新的資訊,其(PND_CID, PND_PID, PND_ROWID)是一樣的。為了不違反唯一性約束,後來的更新對應的資訊會記錄在DR$WAITING中。
如果對一個沒有被同步索引的記錄執行多次更新,會在DR$WAITING記錄多條資訊。
這個表主要用途是:
如果在索引同步的過程中修改了在DR$PENGDING中已經存在的記錄,由於同步還沒有完成DR$PENGDING中的記錄沒有被刪除,
所以,新的修改記錄的資訊不能插入到DR$PENGDING中,只能臨時放在DR$WAITING中。DR$WAITDING在這種情況下才有實際意義。
但實際上,在更新資料的時候,oracle並不會判斷是否有同步索引的任務在執行,它只是簡單地判斷被更新地記錄地資訊在DR$PENGDING是否存在,
如果存在,則把更新資訊放到DR$WAITING中,否則就放到DR$PENGDING中。
Name Type
--------- ------
WTG_CID NUMBER
WTG_ROWID ROWID
WTG_PID NUMBER
DR$DELETE:
該表的owner是基表所屬的ctxsys。
這個表比較有趣,它是一個IOT型別的表,但功能上類似與事務級臨時表(當執行commit後該表的記錄會被刪除)。
當使用者在一個會話刪除一條記錄時,在提交或者回滾前,會在DR$DELETE表插入一條記錄,標識某條記錄已經被刪除,這樣,在當前會話查詢被刪除的記錄將不會有結果返回(但在其他會話仍然能查詢到,因為其他表的資訊還沒有被修改,詳見下文描述);當會話提交事務,oracle會把DR$DELETE的記錄刪除。
Name Type
---------- ------
DEL_IDX_ID NUMBER --index_id
DEL_IXP_ID NUMBER
DEL_DOCID NUMBER --doc id
DR$INDEX
該表主要記錄域索引的相關資訊。
Name Type
------------------- -------------
IDX_ID NUMBER(38) --索引ID
IDX_OWNER# NUMBER
IDX_NAME VARCHAR2(30)
IDX_TABLE_OWNER# NUMBER
IDX_TABLE# NUMBER
IDX_KEY_NAME VARCHAR2(256)
IDX_KEY_TYPE NUMBER
IDX_TEXT_NAME VARCHAR2(256)
IDX_TEXT_TYPE NUMBER
IDX_TEXT_LENGTH NUMBER
IDX_DOCID_COUNT NUMBER --docid的數量
IDX_STATUS VARCHAR2(12)
IDX_VERSION NUMBER
IDX_NEXTID NUMBER
IDX_OPT_TOKEN VARCHAR2(64) --當次最佳化的起始關鍵字
IDX_OPT_TYPE NUMBER
IDX_OPT_COUNT NUMBER --當次最佳化的doc數量
IDX_LANGUAGE_COLUMN VARCHAR2(256)
IDX_FORMAT_COLUMN VARCHAR2(256)
IDX_CHARSET_COLUMN VARCHAR2(256)
IDX_TYPE NUMBER
IDX_OPTION VARCHAR2(40)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63755/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle全文索引之commit與DML操作Oracle索引MIT
- Oracle:全文索引Oracle索引
- oracle全文索引之如何實現查詢Oracle索引
- Oracle的全文索引Oracle索引
- oracle全文索引之配置全文檢索環境Oracle索引
- set容器幾個關鍵函式函式
- C語言的幾個關鍵字C語言
- oracle全文索引之同步和優化索引做了什麼Oracle索引優化
- Nginx HttpHeader增加幾個關鍵的安全選項NginxHTTPHeader
- 關於快取命中率的幾個關鍵問題!快取
- oracle之 反向鍵索引Oracle索引
- Oracle undo保留時間的幾個相關引數Oracle
- 關於ORACLE大型事務回滾的幾個點Oracle
- 聊聊Oracle外來鍵約束(Foreign Key)的幾個操作選項Oracle
- oracle中檢視一張表是否有主鍵,主鍵在哪個欄位上Oracle
- 線上教育平臺開發的幾個關鍵點
- pycharm中幾個快捷鍵PyCharm
- 中文NLP筆記:3. 關鍵詞提取的幾個方法筆記
- 讀懂這幾個關鍵詞,你就能瞭解 Docker 啦Docker
- ERP實施的關鍵點,你的企業做到幾個?
- Python常用時間模組有哪些?這幾個很關鍵!Python
- 【TUNE_ORACLE】Oracle檢查點(三)增量檢查點四個關鍵引數介紹Oracle
- oracle 主外來鍵關係及實驗Oracle
- 搜尋Oracle DDL中的關鍵字Oracle
- JS 總結之關於 this 應該知道的幾個點JS
- 兔子動態代理ip伺服器要遵循幾個關鍵步驟伺服器
- Java 關鍵字之 finalJava
- oracle之 手動建立 emp 表 與 dept 表Oracle
- oracle臨時表空間相關Oracle
- @media實現網頁自適應中的幾個關鍵解析度網頁
- 企業在轉型(數字化、變革)中的幾個關鍵點
- 企業官網建設這幾個關鍵點一定要注意
- ORACLE 查詢條件出現關鍵字:&Oracle
- 解決excel兩表之間資料關聯關係,知道這幾招就夠了Excel
- 如何在Oracle表中選擇主鍵列BWOracle
- JavaScript 複習之 this關鍵字JavaScript
- Oracle 21c新特性預覽與日常管理相關的幾個新特性Oracle
- 怎樣進行高效的團隊協作?這幾個關鍵點要知道