JavaScriptが無効になっています。
この状態では一部の情報が表示されず、すべての機能を利用することができません。
Top > ALTER INDEX > ALTER INDEX <REBUILD>
ALTER INDEX REBUILD による索引の再構築
ALTER INDEX REBUILD 〜 コマンドは索引を完全に再作成するコマンドである。COALESCE 操作と異なり再構築によりインデックスの高さを減らすことも可能。
ALTER INDEX REBUILD
ALTER INDEX my_index REBUILD [ { REVERSE | NOREVERSE } ]
/* 以下順序入れ替え可能 */
[ TABLESPACE my_tablespace ] [ { NOLOGGING | LOGGING } ]
[ ONLINE ]
ALTER INDEX my_index REBUILD
ALTER INDEX my_index REBUILD NOLOGGING
検索キーのバイナリイメージを逆さ読みにする(降順で並び替えたインデックスとは異なる物)
格納イメージ ROWID:「おはよう」 ⇒ ROWID:「うよはお」として再構築する。アクセスのホットスポット分散対策などで利用される。
Right-hand (growth) Index の問題
ALTER INDEX my_index REBUILD REVERSE
ALTER INDEX REBUILD ONLINE
ONLINE オプションによる索引再構築はエンタープライズ版ライセンスの機能でインデックスの再構築中でも索引に対する更新が使用できる機能
ONLINE を指定しない場合
インデックスを再構築中している間は表全体にロックがかかる。そのため後続の DML は再構築が終了するまで待機する。
ONLINE を指定した場合
最終フェーズに旧インデックスと新インデックスを切り替えるときに一時的に表ロックがかけられる。(〜 Oracle 10g)
my_index の ONLINE 再構築
ALTER INDEX my_index REBUILD ONLINE
(索引名のわからない)主キーの再構築を行なう
my_table の主キーに使われているインデックスの ONLINE 再構築
SQL> SELECT INDEX_NAME, TABLE_NAME, STATUS
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = 'MY_TABLE' AND CONSTRAINT_TYPE='P' ;
INDEX_NAME TABLE_NAME STATUS
------------------------------ ------------------------------ --------
SYS_C0012336 MY_TABLE ENABLED
SQL> ALTER INDEX SYS_C0012336 REBUILD ONLINE ;
索引が変更されました。
※ 主キーなど重要な制約には意味の通る名前を付けることが望ましい。
索引を別の表領域に移動させる
my_index を表領域 my_tablespace に移動する。
ALTER INDEX my_index REBUILD TABLESPACE my_tablespace
索引の再構築に関する豆知識
インデックスの再構築は既存のインデックスとは別の新しい データセグメント を獲得して行なわれる。
そのため再構築中であっても旧インデックスによる検索が可能となる(ONLINE オプション)
通常は再構成ためのベースとなるデータの取得には既存のインデックスに対して INDEX FAST FULL SCAN を実行する。表へのテーブルフルスキャンのインデックス版に相当する。
ただ、場合によって元表をベースデータにすることもある。ALTETR TABLE MOVE によってインデックスの価値がなくなった場合(※1) やインデックスが歯抜けとなって TABLE FAST FULL SCAN が INDEX FAST FULL SCAN より優位と判断された場合などである。
(※1) ALTER TABLE MOVE 操作は 表の ROWID が完全に書き換わる。これは解説書でいえばページが無作為に入れ替わってしまう操作であり、巻末にある「索引」は単なる単語表になる。解説ページにたどり着くことができない索引では「索引」を更新する元ネタとしての価値はない。
関連事項