Oracle インデックス(索引)の追加と削除する方法 「CREATE INDEX」「DROP INDEX」

スポンサーリンク

INDEX(索引)を追加する 「CREATE INDEX」文

インデックスを作成することにより、テーブル内の特定データにアクセスする場合、高速でアクセスすることができます。

「CREATE INDEX」文の構文

以下が、「CREATE INDEX」の基本的な構文です。

CREATE INDEX [UNIQUE|BITMAP] INDEX <インデックス名> 
ON <テーブル名> (<カラム名> [ASC|DESC] [,...])
[TABLESPACE <表領域名>];

「CREATE INDEX」文の実行例

以下のテーブルを使って「CREATE INDEX」の検証をしていきます。

SQL> desc animal1;
 名前                  NULL?    型
 --------------------- -------- -------------
 ID                             VARCHAR2(10)
 NAME                           VARCHAR2(20)
 ADDRESS                        VARCHAR2(20)

実際にインデックスを作成してみましょう。

SQL> CREATE INDEX animal1_id_index ON animal1 ( id );

索引が作成されました。

インデックスが作成されているか以下のSQLで確認してみましょう。

SELECT index_name FROM user_indexes
 WHERE table_name = UPPER('animal1');
SQL> SELECT index_name FROM user_indexes
  2   where table_name = UPPER('animal1');

INDEX_NAME
------------------------------
ANIMAL1_ID_INDEX

大変上手にできましたぁ~\(^o^)/

INDEX(索引)を削除する 「DROP INDEX」文

不要なインデックスを作成することにより、更新系のDMLを高速にすることができます。

「DROP INDEX」文の構文

以下が、「DROP INDEX」の基本的な構文です。

DROP INDEX <インデックス名>;

「DROP INDEX」文の実行例

インデックスを削除してみましょう。

SQL> DROP INDEX animal1_id_index;

索引が削除されました。

インデックスが削除されているかSQLで確認してみましょう。

SQL> SELECT index_name FROM user_indexes
  2   WHERE table_name = UPPER('animal1');

レコードが選択されませんでした。

大変上手に削除できましたぁ~\(^o^)/

おまけ

なぜか盲信的にインデックスつけりゃ速くなるって思ってるかたを時たま見かけますが「特定データにアクセスする場合」にインデックスが有効な場合があるということを忘れないでください。(´・ω・`)使いもしないインデックスはりまくらないで。。。

コメント

タイトルとURLをコピーしました