【ORACLE】インデックス(索引)を作成・変更・削除するSQL


ここではORACLEデータベースで、インデックス(索引)を作成・変更・削除するSQLを紹介しています。

インデックスの一覧を確認する方法は↓で紹介しています。
>>【ORACLE】インデックスの一覧を確認するSQL

インデックス(索引)とは

インデックス(索引)とは書籍や本についている目次や索引と似たようなものです。

データを検索するときに、検索したいデータがテーブルのどのあたりに保存されているかを示してくれます。

これによりインデックスを使うことでテーブルへのアクセスを高速化することが出来ます。

インデックス(索引)を作成するSQL

インデックスの作成はCREATE INDEX文を使います。

インデックスの作成や変更、削除には↓の権限が必要です。
 作成:CREATE ANY INDEX
 変更:ALTER ANY INDEX
 削除:DROP ANY INDEX

システム権限の付与の方法については↓で紹介していますので参考にしてください。
>>【ORACLE】システム権限を付与・取消するSQL

CREATE INDEX文の基本構文

CREATE INDEXの基本構文は次の通りです。

CREATE [UNIQUE | BITMAP] INDEX インデックス名
ON スキーマ名.テーブル名(列名)
[TABLESPACE 表領域名]
[COMPRESS]
;

・[UNIQUE | BITMAP]
 UNIQUE:列の値が一意である必要があることを指定
 BITMAP:ビットマップインデックスを作成
・[TABLESPACE 表領域名]
 インデックスを作成する表領域を指定
・[COMPRESS]
 インデックスを圧縮します

CREATE INDEX文を使ったSQLサンプル

CREATE INDEX文のサンプルです。

次のSQLでは、1行目でTAB1テーブルのCOL1列を使って、インデックスを作成しています。

CREATE INDEX idx1 ON user1.tab1(COL1)
TABLESPACE tbs1
;

インデックスを変更するSQL

ALTER文を使うことで、インデックスを変更することが出来ます。

インデックス名を変更するSQL

ALTER INDEX idx1 RENAME tO idx2;

インデックスを再編成・別の表領域へ移動する

ALTER文でREBUILDを指定することで表の再編成(再作成)が出来ます。

ALTER INDEX idx1 REBUILD tbs1;

REBUILDで、別の表領域を指定すると、指定した表領域にインデックスを移すことが出来ます。

ALTER INDEX idx1 REBUILD tbs2

インデックスを圧縮する

ALTER INDEX idx1 COMPRESS;

インデックスを使用不可にする

ALTER INDEX idx1 UNUSABLE;

インデックスを削除するSQL

インデックスを削除するときはDROP文を使います。

DROP INDEX idx1;

まとめ

インデックスの作成はCREATE INDEX、変更はALTER文、削除はDROP文を使います。

インデックスの作成や変更、削除には↓の権限が必要です。
 作成:CREATE ANY INDEX
 変更:ALTER ANY INDEX
 削除:DROP ANY INDEX

システム権限の付与の方法については↓で紹介していますので参考にしてください。
>>【ORACLE】システム権限を付与・取消するSQL