photo credit: blmiers2 via photopin cc
はじめに
Oracleのインデックスは通常Bツリーと呼ばれる二分木で管理されます。レコードが削除されると、Bツリーの高さが高くなり、レコードのへのアクセス効率が悪くなります。
プロとしてのOracle PL/SQL入門 【第3版】(Oracle 12c、11g、10g対応) (Oracle現場主義)
posted with amazlet at 14.07.08
アシスト教育部
SBクリエイティブ
売り上げランキング: 11,963
SBクリエイティブ
売り上げランキング: 11,963
B-Tree 索引(インデックス)は、B-Tree のレベル数(ルート・ブロックからリーフ・ブロックまでの階層)が高くなるとアクセス効率が低下します。
データの削除が多く行われるとブロックの使用効率が低下して B-Tree のレベル数が高くなります。
その場合は索引を再構築(REBUILD)する必要があります。
索引(インデックス)の断片化の確認方法と対処方法 (オラクルエンジニア通信 - 技術資料、マニュアル、セミナー)
インデックスのBツリーの高さを知る
Bツリーの高さを調べるには、以下のコマンドをsysユーザで実行します。
conn sys/oracle as sysdba ANALYZE INDEX test_idx VALIDATE STRUCTURE; SELECT name, height, lf_rows, del_lf_rows, del_lf_rows/lf_rows FROM index_stats;
name | インデックス名 |
height | Bツリーの高さ |
lf_rows | リーフの行数 |
del_lf_rows | 削除されたリーフの行数 |
del_lf_rows/lf_rows | 削除されたリーフの行数÷リーフの行数 |
インデックスの再構築が必要か否か
HEIGHT が4以上で DEL_LF_ROW/LF_ROWS が0.2を超える場合は効率が悪いです。
索引の再構築を行うことを検討して下さい。
索引(インデックス)の断片化の確認方法と対処方法 (オラクルエンジニア通信 - 技術資料、マニュアル、セミナー)