Oracle SQL インデックス作成/使用のサンプル

SQLのインデックスを作成/使用するサンプルです。

目次

説明 インデックス(index)
サンプル インデックスを作成する
  インデックスを確認する
  インデックスを削除する

インデックス(index)

  • インデックスは、レコードの検索結果の表示を早くするために使用します。
  • 件数が多いデータから数件のデータを取得するときに効果が出ます。
    →件数が少なく全件検索で良い場合は設定は不要です。
  • カーディナリティが高い場合、B-Treeインデックスを設定します。
    →カーディナリティとは値の種類が多いことです。
    →カーディナリティが低い場合(性別の男女等)、Bitmapインデックスを設定します。
  • インデックスの列がwhere句やテーブル結合の条件で使用されてはじめて機能します。
  • インデックスがある列のデータが更新されると、インデックスも更新されます。
    →検索は早いが更新は遅いという状態になります。
  • インデックス(index)は、索引という意味です。
  • 以下は、Oracleのインデックスのリンクです。
    https://docs.oracle.com/cd/E57425_01/121/SQLRF/statements_5013.htm

 

インデックスを作成

インデックスを作成するサンプルです。

1.以下のテーブルがあるとします。

SALESテーブル
ID NAME CATEGORY
1 りんご フルーツ
2 みかん フルーツ
3 にんじん 野菜

 

2.テーブルの項目のNameとCATEGORYにインデックスを作成します。

CREATE INDEX インデックス名
On テーブル名;
CREATE INDEX SALES_idx1
On SALES (NAME,CATEGORY);

デフォルトはBツリーインデックスが作成されます。

1行目のSALES_idx1は、作成するインデックス名です。
2行目は、テーブル名(SALES)とインデックスを適用する項目の2つ(NAMEとCATEGORY)を指定しています。
テーブルに関係なくインデックス名が既に存在する場合は作成できません。

 

Bitmapインデックス

CREATE BITMAP INDEX SALES_idx2
On SALES (CATEGORY);

Bitmapインデックスは、Express Editionでは作成できません。
ORA-00439: 機能は有効ではありません: Bit-mapped indexes

 

インデックスを再作成する

ALTER INDEX SALES_idx1 REBUILD;

Insert,Update,Deleteでインデックスの効率が悪くなった時に使用します。

末尾にonlineを追加したALTER INDEX SALES_idx1 REBUILD ONLINE;は、Express Editionでは実行できません。
ORA-00439: 機能は有効ではありません: Online Index Build

 

インデックスを確認する

1.USER_INDEXESテーブルで作成した現ユーザのインデックスを確認できます。

SELECT * FROM USER_INDEXES
where index_name = 'SALES_IDX1';

※whereの条件の値のインデックス名、テーブル名は、大文字小文字を区別します。

 

2.テーブルを指定してインデックスを確認できます。

SELECT *
FROM   ALL_INDEXES
WHERE  TABLE_NAME = 'SALES';

 

インデックスを削除する

インデックスを削除するサンプルです。

DROP INDEX SALES_IDX1;

drop indexとインデックス名を指定します。

https://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_5012.htm

関連の記事

SQL シーケンス(順序)を作成/使用するサンプル
SQL シノニムを作成/使用するサンプル
SQL ビューを作成/使用するサンプル
SQL トリガーを作成/使用するサンプル

△上に戻る