索引構成表の管理(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)>
page revision: 18, last edited: 18 Nov 2009 14:15