14.1.1 インデクスの再編成とは
データの削除(DELETE)及び更新(UPDATE)を繰り返すと,インデクスの格納効率が悪くなり,インデクスを使用した検索をするときの性能が低下します。これを防ぐためには,データベース再編成ユティリティで次に示すどれかの処置をとってください。
ここでは,性能的に優れているインデクスの再編成について説明します。インデクスの再編成の処理概要を次の図に示します。
- 〔説明〕
-
インデクスのキー情報を検索してインデクス情報ファイルを作成し,その情報を基にインデクスを再配置します。これをインデクスの再編成といいます。インデクスの再編成は,インデクス単位又はインデクス格納RDエリア単位に実行できます。
- 〈この項の構成〉
(1) 適用基準
大量データの追加,削除,更新によって生じるインデクスの格納ページの無効領域を解放する場合に適用します。
(2) 表の再編成との使い分け
-
データの更新(UPDATE)が多い場合は,インデクスだけを再編成してください。
-
データの削除(DELETE)及び追加(INSERT)が多い場合は,表を再編成してください。
-
表を再編成する時間の余裕がない場合に,インデクスだけを再編成すれば,インデクス検索時間を短縮できます。
(3) インデクスの再作成との違い
インデクス再作成の処理方式では表データを検索しますが,インデクス再編成の処理方式では表データを検索しません。したがって,インデクスの再作成に比べて処理時間が短くなり※,ソート処理も不要なため性能的にも優れています。ただし,プラグインインデクスは再編成できないため,再作成してください。
- 注※ 次に示す条件を満たす場合に処理時間が短くなります。
-
表格納RDエリアの使用中ページ数 > インデクス格納RDエリアの使用中ページ数
(4) インデクスの再編成時の注意事項
-
同一RDエリア内にある複数のインデクスを同時に再編成する場合は,インデクスを再編成する前にpdholdコマンドでRDエリアを閉塞状態にしてください。そして,インデクスの再編成終了後にpdrelsコマンドでRDエリアの閉塞状態を解除してください。
-
プラグインインデクスは再編成できないため,再作成してください。
(5) 再編成の実行時間を短縮する方法
インデクスの再編成をするとき,データベースの更新ログを取得しなければ(ログレスモード又は更新前ログ取得モード),その分の処理時間が短縮されます。データベースの更新ログ取得方式は,pdrorgコマンドの -lオプションで指定します。省略値は更新前ログ取得モードです。
(6) 満杯状態のRDエリア内のインデクスを再編成する場合
インデクスの再編成時,ページ内の未使用領域の比率はCREATE TABLE又はCREATE INDEXのPCTFREEオペランドの指定が適用されます。したがって,満杯状態のRDエリア内のインデクスを再編成すると,インデクスの再編成時にRDエリアの容量不足が発生することがあります。これを防ぐには,pdrorgコマンドのoption文でidxfreeオペランドを指定して,CREATE TABLE又はCREATE INDEXのPCTFREEオペランドで指定したページ内の未使用領域の比率を変更してください。
なお,これはあくまで再編成前にRDエリアの拡張がすぐにできないときの暫定的な処置です。データの更新に備えて,CREATE TABLEのPCTFREEオペランドの値を考慮した再編成ができるように,データベース構成変更ユティリティ(pdmodコマンド)でRDエリアを拡張してください。