ORACLE索引组织表学习(六)

2014-11-24 12:51:14 · 作者: · 浏览: 6
name='SYS_IOT_TOP_71389'

select * from user_segments where segment_name

组织索引表上的在次索引

SQL>create bitmap index idx_bit_owner onorg_index_table_2(owner);

createbitmap index idx_bit_owner onorg_index_table_2(owner)

ORA-28669:在没有映射表的情况下, 不能在IOT 上创建位图索引

ALTER TABLE org_index_table_2 MOVE MAPPING TABLE

之后就可以建立位图索引了

create index idx_bit_owner onorg_index_table_2(owner)

select count(*) from org_index_table_2 whereowner='SYS'

create table IOT_MAPPING_TEST (name varchar2(32),

nonumber,

constraint PK_IOT_MAPPING_TEST primary key(no)

)

organization index

mapping table;

Table created

SQL>

SQL> select table_name,iot_name,iot_type from user_tables wheretable_name='IOT_MAPPING_TEST';

TABLE_NAME IOT_NAME IOT_TYPE

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

IOT_MAPPING_TEST IOT

select table_name,iot_name,iot_type from user_tables whereiot_type='IOT_MAPPING';

TABLE_NAME IOT_NAME IOT_TYPE

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

SYS_IOT_MAP_56839 IOT_MAPPING_TEST IOT_MAPPING

alter table iot_mapping_test shrink space;

Table altered

SQL> alter table SYS_IOT_MAP_56839 shrink space;

alter table SYS_IOT_MAP_56839 shrink space

ORA-28668: cannot reference mapping table of an index-organized table

借助上面的测试,顺便介绍一下如何move IOT MAPPING TABLES。移动IOT MAPPING TABLES的语法是:

ALTER TABLE MOVE MAPPING TABLE TABLESPACE;

下面做个简单的测试

SQL> select segment_name,segment_type,tablespace_name fromuser_segments where segment_name like '%MAP%';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME

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

SYS_IOT_MAP_56839 TABLE DATA_01

PK_IOT_MAPPING_TEST INDEX DATA_01

SQL> alter table iot_mapping_test move tablespace users;

Table altered

SQL> select segment_name,segment_type,tablespace_name fromuser_segments where segment_name like '%MAP%';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME

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

SYS_IOT_MAP_56839 TABLE DATA_01

PK_IOT_MAPPING_TEST INDEX USERS

可以看到,常规的move操作只是表索引移了。SQL> alter table iot_mapping_test movemapping table tablespace users;

Table altered

SQL> select segment_name,segment_type,tablespace_name fromuser_segments where segment_name like '%MAP%';

SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME

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

SYS_IOT_MAP_56839 TABLE USERS

PK_IOT_MAPPING_TEST INDEX USERS

SQL>

OK,到这里mapping table被成功的移动了

据行的内容。这个确定有时会破坏B-tree 索引的dense clustering property。

Oracle 针对以上问题,提出了 OVERFLOW 子句。如果必要,可以设定OVERFLOW 表空间,每个数据行可以被分割为两部分,一部分用于存储索引项, 另一部分保存在overflow 存储区域中,如下所示:

索引项,其中包含了所有主键字段的字段值,还包含了指向overflow 部 分的物理rowid,以及可选的一些非键字段;

overflow 部分,包含了没有保