oracle索引的storage,oracle全文索引之STORAGE PREFERENCE

Oracle全文索引的STORAGE属性是为了给全文索引生成的辅助表设置存储参数的。[@more@]

Oracle的全文索引会生成一张或多张辅助表,由于这些表是Oracle自动生成的,用户没有办法直接设置这些表和索引的物理参数,因此Oracle提供了STORAGE属性,专门设置这些辅助表和索引的物理参数。

SQL> SELECT * FROM TAB;

TNAME TABTYPE CLUSTERID

------------------------------ ------- ----------

DR$IND_T_DOCS$I TABLE

DR$IND_T_DOCS$K TABLE

DR$IND_T_DOCS$N TABLE

DR$IND_T_DOCS$P TABLE

DR$IND_T_DOCS$R TABLE

T TABLE

已选择6行。

上面的五张表都是全文索引生成的。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

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 YANGTK

DR$IND_T_DOCS$K YANGTK

DR$IND_T_DOCS$N YANGTK

DR$IND_T_DOCS$P YANGTK

DR$IND_T_DOCS$R YANGTK

DR$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

已连接。

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

已连接。

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_INDEXES

20 WHERE INDEX_NAME LIKE 'DR%';

NAME TABLESPACE_NAME

------------------------------ ------------------------------

DR$IND_T_DOCS$I USERS

DR$IND_T_DOCS$K TOOLS

DR$IND_T_DOCS$N USERS

DR$IND_T_DOCS$P TOOLS

DR$IND_T_DOCS$R EXAMPLE

DR$IND_T_DOCS$X INDX

已选择6行。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值