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 ]

  • my_index の再構築
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 が完全に書き換わる。これは解説書でいえばページが無作為に入れ替わってしまう操作であり、巻末にある「索引」は単なる単語表になる。解説ページにたどり着くことができない索引では「索引」を更新する元ネタとしての価値はない。

 


関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)