数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

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


发布日期:2021年12月13日
 
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

已选择

上面的五张表都是全文索引生成的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属性的设置已经生效了

上一篇:Oracle 9i 数据库管理实务讲座(一)之I部分

下一篇:开源之旅——数据库篇(图)