14.4 インデクスを削除する方法
実行者 HiRDB管理者及び表の所有者(又はDBA権限保持者)
データを格納している表に対する処理を変更すると,表の探索条件に合わない不要なインデクスが発生します。不要なインデクスをそのまま残しておくと,行や列の追加又は更新処理のときに,このインデクスに対する余分な処理時間が必要になります。このため,不要になったインデクスは直ちに削除するようにします。
未使用インデクスは,HiRDB SQL Tuning Advisorで調べることができます。未使用インデクスの調査方法については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
インデクスを削除する手順を次に示します。
- 〈手順〉
-
-
DROP INDEXでインデクスを削除します。インデクスの削除中,削除対象のインデクスを定義した表をアクセスするUAPは排他待ち状態になります。
-
インデクスを削除した後に,必要があれば最適化情報収集ユティリティ(pdgetcstコマンド)を実行してください。ただし,プラグインインデクスは最適化情報収集ユティリティの対象外となります。最適化情報収集ユティリティの実行要否については,マニュアル「HiRDB コマンドリファレンス」を参照してください。
-
インデクスを削除すると,削除したインデクスを使用しているストアドルーチンが無効になり,インデクスを削除した表を使用しているストアドルーチンのインデクス情報が無効になります。この場合,ALTER PROCEDURE又はALTER ROUTINEでストアドルーチンを再作成してください。
また,トリガで使用しているインデクスを削除すると,トリガが無効になります。トリガSQL文中に指定している表のインデクスを削除すると,トリガのインデクス情報が無効になります。この場合,ALTER TRIGGER又はALTER ROUTINEでトリガを再作成してください。
-
削除したインデクスにインデクス専用のグローバルバッファを割り当てている場合,そのグローバルバッファを削除してください。削除方法を次に示します。
-
- グローバルバッファの削除方法
-
次に示すどれかの方法でグローバルバッファを削除してください。
-
HiRDBを正常終了してpdbufferオペランドの指定を変更してください(削除したインデクスに対応するpdbufferオペランドを削除してください)。
-
システム構成変更コマンド(pdchgconfコマンド)でpdbufferオペランドの指定を変更してください(削除したインデクスに対応するpdbufferオペランドを削除してください)。この場合,HiRDBを正常終了する必要はありません。ただし,この方法でグローバルバッファを削除する場合はHiRDB Advanced High Availabilityが必要になります。システム構成変更コマンドでHiRDBシステム定義を変更する方法については,「HiRDBの稼働中にHiRDBシステム定義を変更する方法(システム構成変更コマンド)」を参照してください。
-
pdbufmodコマンドでグローバルバッファを削除してください。pdbufmodコマンドでグローバルバッファを削除する方法については,「HiRDBの稼働中にグローバルバッファを追加,変更,又は削除する方法(グローバルバッファの動的変更)」を参照してください。ただし,この方法でグローバルバッファを削除する場合は次に示す条件をすべて満たす必要があります。
・HiRDB Advanced High Availabilityを導入している
・pd_dbbuff_modifyオペランドにYを指定している
なお,この方法で削除したグローバルバッファの情報はHiRDBを正常終了又は計画停止すると無効になるため,HiRDBを終了したときにpdbufferオペランドの指定を変更してください(削除したインデクスに対応するpdbufferオペランドを削除してください)。pdbufferオペランドの指定を変更しないと,このグローバルバッファはどのインデクスにも割り当てられないため,HiRDBを開始したときにエラーになります。
-