[Oracle]インデックス(index)を取得、更新、リビルドする方法

1.指定テーブルのインデックス一覧を取得

SELECT
  INDEX_NAME 
FROM
  USER_IND_COLUMNS 
WHERE
  TABLE_NAME = 'USER_TBL' 
ORDER BY
  INDEX_NAME;

2.インデックスの統計情報を解析
ANALYZE INDEX PK_USER_TBL VALIDATE STRUCTURE;

3.インデックスの統計情報を更新

SELECT
  NAME
  , HEIGHT
  , LF_ROWS
  , DEL_LF_ROWS 
FROM
  INDEX_STATS 
WHERE
  NAME = 'PK_USER_TBL';

結果
NAME     HEIGHT LF_ROWS DEL_LF_ROWS
PK_USER_TBL   1       13 1

height: インデックスの深さ
lf_rows:  リーフ行の数
del_lf_rows: 削除されたリーフ行の数

4.インデックス再構築
ALTER INDEX PK_USER_TBL REBUILD;

Oracle

Posted by arkgame