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