索引構成表の管理(IOT表)

索引構成表の概要

索引構成表のデータはBツリーの索引構造に主キー・ソート方式で格納される。索引構造の各リーフ・ブロックには、キー列と非キー列の両方が格納される。

利点
  • 主キーに対して高速にランダム・アクセスできる。
  • 主キーに対して高速にレンジ・アクセスできる。
  • 索引構造以外に表記憶域がないため、新しい行の追加、行の更新、行の削除などにより表データを変更すると、索引構造の更新のみが実行される。
  • 主キーの複製が回避されるため、記憶域の所要量を低く抑えられる。
索引構成表の機能
  • 制約、トリガー(ヒップ表と共通)
  • LOB列とオブジェクト列(ヒップ表と共通)
  • パーティション化、パラレル操作、オンライン再編成(ヒップ表と共通)
  • レプリケーション機能(ヒップ表と共通)
  • キー圧縮
  • オーバーフロー記憶域と固有の列配置
  • ビットマップ索引を含めた2次索引

索引構成表の作成

構文

CREATE TABLE … ORGANIZATION INDEX { PCTTHRESHOLD | OVERFLOW TABLESPACE | INCLUDING }
OVERFLOW
指定したしきい値を超える行列値を別のオーバーフロー・データ・セグメントに格納することにより、Bツリー索引の稠密なクラスタを保つ。
PCTTHRESHOLD
この値は、索引構成表の索引ブロックに保持される領域の割合(百分率)を定義する。行のうち、指定したしきい値を超える部分は、オーバーフロー・セグメントに格納される。
INCLUDING
この句は、オーバーフロー・データ・セグメントに格納される非キー列を指定するために使用する。
データベースでは、索引リーフ・ブロック内にINCLUDING句で指定した列までのすべての非キー列を取り込むことができる。
ただし、その列が指定したしきい値を超えない場合に限る。INCLUDING句で指定した列より後のすべての非キー列は、オーバーフロー領域に格納される。

IOT表の作成
CREATE TABLE TOM.IOT_TEST
(
    USER_ID                        NUMBER(5,0) NOT NULL,
    USER_NAME                      VARCHAR2(30) NOT NULL,
    AGE                            NUMBER(3,0),
    BIRTH                          DATE,
    ADDRESS                        VARCHAR2(100),
    REMARKS                        VARCHAR2(1000),
    CONSTRAINT PK_IOT_TEST PRIMARY KEY (USER_ID)
)
ORGANIZATION INDEX
TABLESPACE USERS;

OVERFLOWとPCTTHRESHOLDの併用
CREATE TABLE TOM.IOT_TEST
(
    USER_ID                        NUMBER(5,0) NOT NULL,
    USER_NAME                      VARCHAR2(30) NOT NULL,
    AGE                            NUMBER(3,0),
    BIRTH                          DATE,
    ADDRESS                        VARCHAR2(100),
    REMARKS                        VARCHAR2(1000),
    CONSTRAINT PK_IOT_TEST PRIMARY KEY (USER_ID)
)
ORGANIZATION INDEX
TABLESPACE USERS
PCTTHRESHOLD 15
OVERFLOW TABLESPACE EXAMPLE;

INCLUDINGの使用
AGE以降の非主キー列をオーバーフローセグメントに格納される。
CREATE TABLE TOM.IOT_TEST
(
    USER_ID                        NUMBER(5,0) NOT NULL,
    USER_NAME                      VARCHAR2(30) NOT NULL,
    AGE                            NUMBER(3,0),
    BIRTH                          DATE,
    ADDRESS                        VARCHAR2(100),
    REMARKS                        VARCHAR2(1000),
    CONSTRAINT PK_IOT_TEST PRIMARY KEY (USER_ID)
)
ORGANIZATION INDEX
TABLESPACE USERS
INCLUDING AGE
OVERFLOW TABLESPACE EXAMPLE;

COMPRESSキー圧縮の使用
CREATE TABLE admin_iot5(i INT, j INT, k INT, l INT, PRIMARY KEY (i, j, k)) 
    ORGANIZATION INDEX COMPRESS;
-- 下記は上記と等価である。つまり、複合キーの2番目まで圧縮される。
CREATE TABLE admin_iot6(i INT, j INT, k INT, l INT, PRIMARY KEY(i, j, k)) 
    ORGANIZATION INDEX COMPRESS 2;
索引構成表作成のパラレル化
CREATE TABLE TOM.IOT_OBJECTS (OWNER,OBJECT_NAME,OBJECT_ID PRIMARY KEY)
ORGANIZATION INDEX 
TABLESPACE USERS
PARALLEL
AS SELECT OWNER,OBJECT_NAME,OBJECT_ID FROM DBA_OBJECTS

索引構成表の変更

OVERFLOW表領域追加
PROD(TOM)>alter table iot_objects add overflow tablespace example;
 
表が作成されました。
 
PROD(TOM)>
PCTTHRESHOLDとINCLUDINGの再定義
PROD(TOM)>alter table iot_objects pctthreshold 15 including object_name;
 
表が変更されました。
 
PROD(TOM)>
索引構成表の移動(再作成)
PROD(TOM)>alter table iot_objects move;
 
表が変更されました。
 
PROD(TOM)>alter table iot_objects move overflow tablespace users;    -- OVERFLOW表領域の変更
 
表が変更されました。
 
PROD(TOM)>
索引構成表に対する2次索引の作成
PROD(TOM)>desc iot_objects;
 名前                                    NULL?    型
 ----------------------------------------- -------- ----------------------------
 OWNER                                              VARCHAR2(30)
 OBJECT_NAME                                        VARCHAR2(128)
 OBJECT_ID                                 NOT NULL NUMBER
 
PROD(TOM)>create index idx_iot_objects on iot_objects(object_name) tablespace indx;
 
索引が作成されました。
 
PROD(TOM)>

2次索引を再作成することによって、不確定要素のブロック参照を更新する。
ALTER INDEX …UPDATE BLOCK REFERENCES
PROD(TOM)>ALTER INDEX idx_iot_objects UPDATE BLOCK REFERENCES;
 
索引が変更されました。
 
PROD(TOM)>
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License