索引组织表(一)

2014-11-24 17:08:25 · 作者: · 浏览: 0

索引组织表

对于索引组织表必须有主键,问题它没有rowid,且只有逻辑rowid猜测到溢出部分。索引组织表可以进行分区,但只能是范围分区、散列分区、列表分区,但不能为复合分区。另外索引组织

表其实就是根据表的主键按照一定的顺序将数据表和索引进行了整合一张表,如果该字段过大,那么访问相关特定数据行就会出现穿越多个块,因此对于不经常访问的列归为溢出部分,如果

启用溢出部分需要使用overflow关键字,including字段指定该列之后的列都会放到溢出部分中,另外pctthreshold指定当该块数据达到一个标准值之后,那么其余部分将会放到溢出部分中。

SQL> create table locations_iot(
  2  location_id number(4) not null,
  3  street_address varchar2(40),
postal_code varchar2(12),
  4    5  city varchar2(20)
  6  )
  7  organization index; 
organization index
             *
ERROR at line 7:
ORA-25175: no PRIMARY KEY constraint found


SQL> create table locations_iot(
  2  location_id number(4) not null,
  3  street_address varchar2(40),
postal_code varchar2(12),
  4    5  city varchar2(20),
  6  constraint locations_iot_pk primary key(location_id)
  7  )
  8  organization index;

Table created.

SQL> create table locatios_iot(
  2  location_id number(4) not null,
  3  street_address varchar2(40),
  4  postal_code varchar2(12),
  5  city varchar2(20),
  6  constraint locatios_iot primary key(location_id,street_address)
  7  ) organization index
  8  partition by list(street_address)
  9  (
 10  partition part1 values('Happy','New','YEAR') tablespace test,
 11  partition part2 values('My','leadership','do','not','let','me','go','home') tablespace test
 12  );

Table created.

SQL> 

使用analyze table xxx list chained rows;确定pctthreshold设置是否合理。
出现表的链接记录和迁移记录的rowid都会保存到表chaind_rows中,但是该表必须提前创建,
eg:

SQL> @ /rdbms/admin/utlchain.sql

Table created.

SQL> select table_name from user_tables where table_name='CHAINED_ROWS';

TABLE_NAME
------------------------------
CHAINED_ROWS

SQL> analyze table t list chained rows;

Table analyzed.

SQL> select * from chained_rows;

no rows selected

SQL> 

注意在添加映射表或是overflow之后都会自动创建相关表:
eg:

SQL> alter table employees move mapping table;

Table altered.

SQL> select table_name,iot_name,iot_type from user_tables;                             

TABLE_NAME                     IOT_NAME                       IOT_TYPE
------------------------------ ------------------------------ ------------
SYS_IOT_MAP_87909              EMPLOYEES                      IOT_MAPPING
SYS_IOT_OVER_87909             EMPLOYEES                      IOT_OVERFLOW
EMPLOYEES                                                     IOT
ACHIVEMENT
ACHIVEEMENT
T_LIST
RANGE_LIST
RANGE_LIST_PARTITION
CHAINED_ROWS
EMP
SALGRADE

TABLE_NAME                     IOT_NAME                       IOT_TYPE
------------------------------ ------------------------------ ------------
DEPT

12 rows selected.

SQL> alter table employees move nomapping;

Table altered.


SQL> select table_name,iot_name,iot_type from user_tables;                             

TABLE_NAME                     IOT_NAME                       IOT_TYPE
------------------------------ ------------------------------ ------------
SYS_IOT_OVER_87909             EMPLOYEES                      IOT_OVERFLOW
EMPLOYEES                                                     IOT
ACHIVEMENT
ACHIVEEMENT
T_LIST
RANGE_LIST
RANGE_LIST_PARTITION
CHAINED_ROWS
EMP
SALGRADE
DEPT

11 rows selected.


SQL> alter table employees move mapping table;

Table altered.

SQL> select table_name,iot_name,iot_type from user_tables;

TABLE_NAME                     IOT_NAME                       IOT_TYPE
------------------------------ ------------------------------ ------------
SYS_IOT_MAP_87909              EMPLOYEES                      IOT_MAPPING
SYS_IOT_OVER_87909             EMPLOYEES                      IOT_OVERFLOW
EMPLOYEES                                                     IOT
ACHIVEMENT
ACHIVEEMENT
T_LIST
RANGE_LIST
RANGE_LIST_PARTITION
CHAINED_ROWS
EMP
SALGRADE

TAB