索引(インデックス)を操作するSQLコマンドまとめ

索引(インデックス)を操作するSQLコマンドをいくつか紹介します。

索引(インデックス)を確認する方法

<INDEXの確認>
select a.* from dba_indexes a where a.OWNER = ‘USER1’

<INDEXのカラム確認>
select a.* from dba_ind_columns a where a.INDEX_OWNER = ‘USER1’;

現在存在するインデックスを確認するには、DBA_INDEXESを使います。OWNERにスキーマ名を条件とすることで絞込み出来ます。
インデックスのカラムを調べたいときは、DBA_IND_COLUMNSを使います。

索引(インデックス)の作成

<SQL構文>
CREATE INDEX 索引名 ON 表名(列名1[,列名2・・・])
TABLESPACE 表領域名

<SQLサンプル>
create index test1_idx1 ON test1(id) tablespace tbs1;

基本的なオプションはテーブルと同じように指定できます。索引を圧縮して作成する場合は「create index test1_idx1 ON test1(id) tablespace tbs1 compress;」とCOMPRESSを付けて作成します。

索引(インデックス)の削除

<SQL構文>
DROP INDEX 索引名

<SQLサンプル>
drop index test1_idx1;

DROP INDEX文で削除できます。

索引(インデックス)の名称変更

<SQL構文>
ALTER INDEX 変更前の索引名 RENAME TO 変更後の索引名

<SQLサンプル>
alter INDEX test1_idx1 rename to test1_idx2;

ALTER RENAME文で名前を変更できます。

索引(インデックス)の再編成

<SQL構文>
ALTER INDEX 索引名 REBUILD

<SQLサンプル>
alter INDEX test1_idx1 rebuild;

ALTER REBUILD文でインデックスの再編成が出来ます。データの更新や削除を繰り返し行っている項目については、定期的に再編成を行うことをオススメします。

索引(インデックス)の表領域移動

<SQL構文>
ALTER INDEX 索引名 REBUILD TABLESPQCE 表領域名

<SQLサンプル>
alter INDEX test1_idx1 rebuild tablespace tbs2;

ALTER REBUILD文でインデックスの表領域を移動することが出来ます。REBUILDコマンドを使うので、別の表領域に再作成するような動きになります。

索引(インデックス)を見えないようにする

<SQL構文>
ALTER INDEX 索引名 invisible

<SQLサンプル>
alter INDEX test1_idx1 invisible;

ALTER文でインデックスを不可視、オプティマイザから無視させるようにすることが出来ます。試験的なインデックスなどはこのモードにするとオプティマイザから無視されます。

不可視モードを解除するには、「alter INDEX test1_idx1 visible;」のようにvisibleに変更します。

索引(インデックス)を無効にする

<SQL構文>
ALTER INDEX 索引名 UNUSABLE

<SQLサンプル>
alter INDEX test1_idx1 unusable;

ALTER文でインデックスを無効にすることが出来ます。有効にするには、REBUILDで再構築するか一度削除して作成する必要があります。