Oracle Databaseのインデックスの再作成・変更**SQL「alter index**」とそのポイントを紹介します。
「alter index」は各種メディアやブログで紹介されており、
指定できるパラメータも多くあります。
この記事では初心者向けにインデックスを再作成・変更する時の重要なポイントも合わせて紹介します。
※ この記事はB-Treeインデックスについての記載しますので、その他のインデックスについては別記事で紹介します。
この記事の内容
- インデックス再作成・変更のSQL「alter index」の基本構文
- インデックスの格納先表領域の変更
- インデックスの利用有無
インデックス再作成・変更のSQL:alter index
alter indexの基本構文は↓になります。
alter index <ユーザー名>.<インデックス名> [各種操作];
[各種操作]でインデックスの再作成・変更を指定します。
インデックスの再作成:rebuild
インデックスの再作成を行うには、「rebuild」句を指定します。
alter index <ユーザー名>.<インデックス名> rebuild;
インデックスを長い期間使っているとインデックスの断片化やブロックの偏りが生じるため、
インデックスが原因で性能劣化が発生します。
インデックスの再作成中はインデックスを利用出来なる点に注意しましょう。
下がサンプルのSQL文になります。
alter index test001.tab001_idx rebuild;
オンライン中のインデックスの再作成:rebuild online
オンライン中にインデックスの再作成を行うには、「rebuild online」句を指定します。
オンライン中とは「データベースに問い合わせが来ている」状態を指します。
alter index <ユーザー名>.<インデックス名> rebuild online;
ただし以下の制限事項があるので注意が必要です。
- オンラインインデックスの作成中は、パラレルDMLはサポートされていません。パラレルDML文を発行すると、ORAエラーを戻します。
- ビットマップ結合インデックスまたはクラスタインデックスには指定できません。
- インデックス構成テーブルの一意でない2次インデックスの場合、構成テーブルのインデックスキー列の数とROWIDの主キー列の数の合計はを32以下にする必要があります。ROWIDはインデックスキーに含まれる列を除外します。
下がサンプルのSQLになります。
alter index test001.tab001_idx rebuild online;
インデックスの格納先表領域を変更:rebuild tablespace
インデックスの格納先表領域を変更するためには「rebuild tablespace」句を指定します。
alter index <ユーザー名>.<インデックス名> rebuild tablespace <変更先の表領域名>;
下がサンプルのSQLになります。
alter index test001.tab001_idx rebuild tablespace TESTTBS;
インデックスの利用有無(不可視索引の有効・無効化):visible / invisible
オプティマイザのインデックス利用有無を指定するのが「visible / invisible」です。
alter index <ユーザー名>.<インデックス名> <visiable or invisible>;
デフォルトでは。「visiable」を設定されます。
通常インデックスを問い合わせ時に使用しますが、
「invisible」を指定しますと問合せ時にオプティマイザによって使用されません。
初期化パラメータ「OPTIMIZER_USE_INVISIBLE_INDEXES」をセッションまたはシステムレベルで明示的に「TRUE」に設定することで、
「invisible」を指定したインデックスも使用されます。
使いどころとして、日中帯はインデックスを使用せず夜間のパッチ処理などがあります。
下がサンプルのSQLになります。
alter index test001.tab001_idx invisible;