Oracle全文索引的STORAGE属性使用介绍


这篇文章介绍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

  已选择6行。

  上面的五张表都是全文索引生成的。CONTEXT索引生成表的规则是DR{GetProperty(Content)}索引名+{GetProperty(Content)}表用途标识。

  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会将这些对象存放到默认表空间中,并根据默认表空间的存储参数设置这些对象的存储参数。

  1 SQL SELECT

  2 TABLE_NAME NAME,

  3 DECODE

  4 (

  5 IOT_TYPE,

  6 'IOT',

  7 (

  8 SELECT TABLESPACE_NAME

  9 FROM USER_INDEXES

  10 WHERE TABLE_NAME = A.TABLE_NAME

  11 AND INDEX_TYPE = 'IOT - TOP'

  12 ),

  13 TABLESPACE_NAME

  14 ) TABLESPACE_NAME

  15 FROM USER_TABLES A

  16 WHERE TABLE_NAME LIKE 'DR%'

  17 UNION ALL

  18 SELECT INDEX_NAME NAME, TABLESPACE_NAME

  19 FROM USER_INDEXES

  20 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

  已选择6行。

  下面通过设置STORAGE属性,设置自动生成的表和索引的表空间属性:

  SQL CREATE TABLE T (ID NUMBER, DOCS VARCHAR2(1000));

  表已创建。

  SQL INSERT INTO T VALUES (1, 'A simple example for storage.');

  已创建 1 行。

  SQL COMMIT;

  提交完成。

  SQL CONN CTXSYS/CTXSYS@YANGTK

  注意:这里是ctxsys登陆,登陆前一般需要解锁ctxsys用户/ alter user ctxsys account unlock;已连接。

  1 SQL BEGIN

  2 CTX_DDL.CREATE_PREFERENCE('TEST_WORDLIST_STORAGE', 'BASIC_WORDLIST');

  3 CTX_DDL.SET_ATTRIBUTE('TEST_WORDLIST_STORAGE', 'SUBSTRING_INDEX', 'TRUE');

  4 CTX_DDL.CREATE_PREFERENCE('TEST_STORAGE', 'BASIC_STORAGE');

  5 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'I_TABLE_CLAUSE', 'TABLESPACE USERS');

  6 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'K_TABLE_CLAUSE', 'TABLESPACE TOOLS');

  7 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'R_TABLE_CLAUSE', 'TABLESPACE EXAMPLE');

  8 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'N_TABLE_CLAUSE', 'TABLESPACE USERS');

  9 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'P_TABLE_CLAUSE', 'TABLESPACE TOOLS');

  10 CTX_DDL.SET_ATTRIBUTE('TEST_STORAGE', 'I_INDEX_CLAUSE', 'TABLESPACE INDX');

  11 END;

  12 /

  PL/SQL 过程已成功完成。

  SQL CONN YANGTK/YANGTK@YANGTK已连接。

  1 SQL CREATE INDEX IND_T_DOCS ON T(DOCS) INDEXTYPE IS CTXSYS.CONTEXT

  2 PARAMETERS ('WORDLIST CTXSYS.TEST_WORDLIST_STORAGE STORAGE CTXSYS.TEST_STORAGE');

  索引已创建。

  SQL SELECT

  2 TABLE_NAME NAME,

  3 DECODE

  4 (

  5 IOT_TYPE,

  6 'IOT',

  7 (

  8 SELECT TABLESPACE_NAME

  9 FROM USER_INDEXES

  10 WHERE TABLE_NAME = A.TABLE_NAME

  11 AND INDEX_TYPE = 'IOT - TOP'

  12 ),

  13 TABLESPACE_NAME

  14 ) TABLESPACE_NAME

  15 FROM USER_TABLES A

  16 WHERE TABLE_NAME LIKE 'DR%'

  17 UNION ALL

  18 SELECT INDEX_NAME NAME, TABLESPACE_NAME

  19 FROM USER_INDEXES20 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

  已选择6行。

  通过查询看到,STORAGE属性的设置已经生效了


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3