プロが教えるわが家の防犯対策術!

Oracle11gを使用しています。
制約と同じようにINDEXも無効化することは出来るのでしょうか。

テーブル名と、フラグ(無効化/有効化)を引数として、制約、INDEXの無効化、有効化
を行うプログラムを作成したいと考えています。

制約は、「ALTER TARBLE テーブル名 DISABLE(又はENABLE ) CONSTRAINT 制約名」
にて無効化、有効化することが出来ますが、INDEXも同じように無効化、有効化することは
出来るのでしょうか?

よろしくお願いします。

A 回答 (1件)

▼以下のSQLで無効化できます。



alter index ind_test invisible;
alter index ind_test unusage;

有効化は以下です。

alter index ind_test rebuild;

invisibleでオプティマイザから索引が見えなくなります。
unusageでDML発行時の索引の更新を抑止します。
有効化するときはテーブルと同期がとれていない状態なので
索引を再構築する必要があります。

▼無効化している間のDMLで索引も更新されても問題ない場合はunusageのみでOKです。

alter index ind_test unusage;

有効化は以下です。

alter index ind_test usable;

こちらの方が手軽ですが、大量データを入れる場合の性能改善はありません。
索引がない場合のオプティマイザの動作確認に使うくらいでしょうか。
    • good
    • 1
この回答へのお礼

お礼が遅れてしまい申し訳ありません。

御回答ありがとうございました。

作成しようとしているプログラムは、大量データの登録前後に実行する想定のため教えていただいた下記コマンドを使用させていただきます。

> 無効化
> alter index ind_test invisible;
> alter index ind_test unusage;
>
> 有効化
> alter index ind_test rebuild;

ありがとうございました。

お礼日時:2012/12/16 02:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A