0
0

More than 1 year has passed since last update.

【備忘録】インデックス(索引)について【Oracle Database SQL】

Posted at

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

インデックス(索引)はデータの検索を高速にするためのオブジェクトです。
インデックスが設定されていない表でデータを検索する場合、問合せの条件に従って、表の先頭のデータから1行ずつ検索していきますので、データが大量にある場合には相当の時間がかかります。インデックスを設定することによって、欲しいデータにピンポイントにアクセスできるため、検索を高速化できます。

Oracleでは、表を作成する時にPRIMARY KEY制約やUNIQUE制約を指定すると、 一意性の保証などの目的で、その列(または列の組み合わせ)に対して、 自動的に索引が作成されます。

2.インデックスガイドライン

・索引を作成した方がよい場合
  
  大規模な表の、1%から15%程度の行を頻繁に検索する。
  列の値が、比較的一意である
  WHERE句の条件として、頻繁に使用される列である。
  
・索引を作成しない方がよい場合
  
  列内に、異なる値がほとんどない(例えば、性別など)。
  NULL値が多く、NULLでない値を検索しない。
  表が小規模である。
  
・一般に、参照整合性制約で使用される外部キー列には、索引の作成を考えるべきです。

3.インデックス作成方法

インデックスは、テーブルの列(カラム)に対して設定します。
 CREATE [UNIQUE] INDEX 索引名
  ON 表名(列名 [,列名...] [ASC| DESC])
  [VISIBLE | INVISIBLE];

以下の例では、employee表のname列に、index1という索引を作成しています。

 CREATE INDEX index1	
   ON employee (name);

表の列にインデックスが設定されると、インデックスが設定された列の値と、その物理的な格納場所(ROWID)を登録します。
表に設定されたインデックスは、表に対してDML文を実行する度にメンテナンス(必要であれば更新)されます。

4.インデックスの削除

索引を削除するには、DROP INDEX文を使用します。
DROP INDEX文では削除する索引を指定します。
DROP INDEX 索引名

DROP INDEX index1;

5.インデックスの留意点

  • インデックスのは1つの列に対してだけでなく、列の組み合わせに対しても作成できます。
  • インデックスは検索条件にマッチするデータの件数が少ない場合に有効です。
  • 1つの表に多数のインデックスを作成すると、表の行データ変更時の負荷が増加します。
  • インデックスを定義した表が削除されると、そのインデックスも一緒に削除されます。
  • インデックスを設定した表と、インデックスを別の表領域格納することができます。
  • インデックスを設定した表と、インデックスを別のスキーマに格納することもできます。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0