熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle全文索引的STORAGE屬性使用介紹

2022-06-13   來源: Oracle 

  這篇文章介紹Oracle全文索引的STORAGE屬性

  Oracle全文索引的STORAGE屬性是為了給全文索引生成的輔助表設置存儲參數的

  Oracle的全文索引會生成一張或多張輔助表由於這些表是Oracle自動生成的用戶沒有辦法直接設置這些表和索引的物理參數因此Oracle提供了STORAGE屬性專門設置這些輔助表和索引的物理參數

  SQL SELECT * FROM TAB;

  TNAME TABTYPE CLUSTERID—————————— —— ———DR$IND_T_DOCS$I TABLEDR$IND_T_DOCS$K TABLEDR$IND_T_DOCS$N TABLEDR$IND_T_DOCS$P TABLEDR$IND_T_DOCS$R TABLET TABLE

  已選擇

  上面的五張表都是全文索引生成的CONTEXT索引生成表的規則是DR$+索引名+$+表用途標識

  DR$IND_T_DOCS$I存儲的是索引數據表(Index data table);

  DR$IND_T_DOCS$K存儲的是鍵值映射表(Keymap table);

  DR$IND_T_DOCS$R是ROWID表(Rowid table);

  DR$IND_T_DOCS$N是負鍵值鏈表(Negative list table);

  DR$IND_T_DOCS$P這個表只有在CONTEXT索引中設置BASIC_WORDLIST的SUBSTRING_INDEX屬性後才會生成用來保存單詞的部分內容

  DR$IND_T_DOCS$X這個索引是DR$IND_T_DOCS$I表的索引

  SQL SELECT TABLE_NAME INDEX_NAME FROM USER_INDEXES WHERE INDEX_NAME LIKE DR%;

  TABLE_NAME INDEX_NAME—————————— ——————————DR$IND_T_DOCS$I DR$IND_T_DOCS$X

  如果不進行設置那麼Oracle會將這些對象存放到默認表空間中並根據默認表空間的存儲參數設置這些對象的存儲參數

   SQL SELECT

   TABLE_NAME NAME

   DECODE

   (

   IOT_TYPE

   IOT

   (

   SELECT TABLESPACE_NAME

   FROM USER_INDEXES

   WHERE TABLE_NAME = ATABLE_NAME

   AND INDEX_TYPE = IOT TOP

   )

   TABLESPACE_NAME

   ) TABLESPACE_NAME

   FROM USER_TABLES A

   WHERE TABLE_NAME LIKE DR%

   UNION ALL

   SELECT INDEX_NAME NAME TABLESPACE_NAME

   FROM USER_INDEXES

   WHERE INDEX_NAME LIKE DR%;

  NAME TABLESPACE_NAME—————————— ———————DR$IND_T_DOCS$I YANGTKDR$IND_T_DOCS$K YANGTKDR$IND_T_DOCS$N YANGTKDR$IND_T_DOCS$P YANGTKDR$IND_T_DOCS$R YANGTKDR$IND_T_DOCS$X YANGTK

  已選擇

  下面通過設置STORAGE屬性設置自動生成的表和索引的表空間屬性

  SQL CREATE TABLE T (ID NUMBER DOCS VARCHAR());

  表已創建

  SQL INSERT INTO T VALUES ( A simple example for storage);

  已創建

  SQL COMMIT;

  提交完成

  SQL CONN CTXSYS/CTXSYS@YANGTK

  注意這裡是ctxsys登陸登陸前一般需要解鎖ctxsys用戶/ alter user ctxsys account unlock;已連接

   SQL BEGIN

   CTX_DDLCREATE_PREFERENCE(TEST_WORDLIST_STORAGE BASIC_WORDLIST);

   CTX_DDLSET_ATTRIBUTE(TEST_WORDLIST_STORAGE SUBSTRING_INDEX TRUE);

   CTX_DDLCREATE_PREFERENCE(TEST_STORAGE BASIC_STORAGE);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE I_TABLE_CLAUSE TABLESPACE USERS);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE K_TABLE_CLAUSE TABLESPACE TOOLS);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE R_TABLE_CLAUSE TABLESPACE EXAMPLE);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE N_TABLE_CLAUSE TABLESPACE USERS);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE P_TABLE_CLAUSE TABLESPACE TOOLS);

   CTX_DDLSET_ATTRIBUTE(TEST_STORAGE I_INDEX_CLAUSE TABLESPACE INDX);

   END;

   /

  PL/SQL 過程已成功完成

  SQL CONN YANGTK/YANGTK@YANGTK已連接

   SQL CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYSCONTEXT

   PARAMETERS (WORDLIST CTXSYSTEST_WORDLIST_STORAGE STORAGE CTXSYSTEST_STORAGE);

  索引已創建

  SQL SELECT

   TABLE_NAME NAME

   DECODE

   (

   IOT_TYPE

   IOT

   (

   SELECT TABLESPACE_NAME

   FROM USER_INDEXES

   WHERE TABLE_NAME = ATABLE_NAME

   AND INDEX_TYPE = IOT TOP

   )

   TABLESPACE_NAME

   ) TABLESPACE_NAME

   FROM USER_TABLES A

   WHERE TABLE_NAME LIKE DR%

   UNION ALL

   SELECT INDEX_NAME NAME TABLESPACE_NAME

   FROM USER_INDEXES WHERE INDEX_NAME LIKE DR%;

  NAME TABLESPACE_NAME—————————— ——————————DR$IND_T_DOCS$I USERSDR$IND_T_DOCS$K TOOLSDR$IND_T_DOCS$N USERSDR$IND_T_DOCS$P TOOLSDR$IND_T_DOCS$R EXAMPLEDR$IND_T_DOCS$X INDX

  已選擇

  通過查詢看到STORAGE屬性的設置已經生效了


From:http://tw.wingwit.com/Article/program/Oracle/201311/18200.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.