InterBase クイック スタート:Part II - インデックスの作成

提供: InterBase

InterBase クイック スタート:Part II - データ定義 へ戻る

インデックスは、1 のテーブルにおける、1 つまたは複数の列に基づいています。 インデックスは、指定された列の内容を順序付けし、その情報をディスク上に保存することで、それら列へのアクセスを高速化します。 インデックスはデータ抽出のパフォーマンスを向上させますが、ディスク スペースを取り、挿入および更新のスピードを劣化させる可能性があります。 このため、インデックスは大抵、頻繁にクエリがかけられる列で使用されます。インデックスはまた、一意性と、参照整合性の制約を強化します。

InterBase は、UNIQUE および PRIMARY KEY の列について、インデックスを自動的に生成します。 制約の詳細については、『データ定義ガイド』を参照してください。

CREATE INDEX 文を使用して、インデックスを作成します。 最も簡略化した構文は次のとおりです:

CREATE INDEX index_name
  ON table (columns)

任意で、CREATE INDEX キーワードに続いて、1 つまたは複数の ASCENDINGDESCENDINGUNIQUE キーワードを追加することができます。

Image 025.jpg Name インデックスを作成する

次のインデックスを Employee テーブルに対して定義します:

CREATE INDEX namex
  ON Employee (last_name, first_name)

この文は、namex というインデックスを、Employee テーブルの列 last_namefirst_name に対して、定義しています。

注意:
デフォルトでは、別のテーブル領域が指定されない限り、インデックスはテーブルと同じテーブル領域に存在します。テーブル領域の詳細については、ドキュメント「テーブル領域」を参照してください。

インデックス エントリの重複を防ぐ

重複エントリをなくすインデックスを定義するには、UNIQUE キーワードを CREATE INDEX に含めます。 UNIQUE インデックスを定義する際、ユーザーはインデックス付けされた列に同じ値がすでに存在する場合には、その値を挿入または更新することはできません。

複数列で定義される一意インデックス(下の例の prodtypex など)の場合、個々の列には同じ値を入力することはできますが、インデックスのすべての列に入力される値の組み合わせでは、各行が一意に識別できなければなりません。

すでに一意ではない値を含んでいる列に対して、NIQUE インデックスを作成することはできません。

Image 025.jpg UNIQUE インデックスを作成する

prodtypex という名前の一意のインデックスを、Project テーブル上に作成します:

CREATE UNIQUE INDEX prodtypex
  ON Project (product, proj_name)

インデックスのソート順の指定

デフォルトでは、SQL はインデックスを昇順に保持します。 より効率的にするために、列または列グループを降順にソートするには、インデックスを定義する際に DESCENDING キーワードを使用します。

Image 025.jpg DESCENDING インデックスを作成する

budgetx という名のインデックスを降順で作成するには、次のコードを入力、実行します:

CREATE DESCENDING INDEX budgetx 
  ON Department (budget)

インデックスの変更

インデックス定義を変更するには、まずそのインデックスをドロップし、それから新しいインデックスを作成する必要があります:

Image 025.jpg Name インデックスを変更する

namex インデックスの現在の定義をまず調べます。

  1. namex インデックスは Employee テーブルで作成されているため、IBConsole の左ペインで、そのテーブルを選択します。
  2. Employee テーブルを右クリックし、プロパティ を選択します。
  3. プロパティ ウィンドウのメニュー バーで、インデックスを表示を選択します(IBConsolePropertiesShowIndexes.png)。
  4. Namex インデックスが UNIQUE ではないのが確認できます。
    TutorialIndex.png
  5. 次の DROP INDEX 文を入力し、実行します:
    DROP INDEX namex
    
  6. 次の行を入力、実行して、Namex インデックスが UNIQUE キーワードを含むよう再定義します:
    CREATE UNIQUE INDEX namex
      ON Employee (last_name, first_name)
    
  7. 今一度、Employee テーブルの プロパティ ウィンドウを開き、インデックスを表示 を選択します。
  8. 今度は、Namex インデックスが UNIQUE となっているのが確認できます。
    TutorialIndex2.png

Image 025.jpg インデックスをテーブル領域に割り当てる

このセクションでは、インデックスをテーブル領域に割り当てる方法について説明します。 ALTER INDEX 句を使用すると、既存のインデックスをテーブル領域に割り当てることができます。

注意:
デフォルトでは、すべてのインデックスがテーブル領域 Primary に属します。 InterBase テーブル領域のコンテキストでは、インデックスをテーブル領域に割り当てると、Primary から別の既存のテーブル領域に移動します。
ALTER INDEX {<tablespace_name> | PRIMARY}
    [ALTER TABLESPACE {<tablespace_name> | PRIMARY}]

まず ALTER INDEX を使用してインデックス NAMEX を変更し、その後、ALTER TABLESPACE を使用してインデックス NAMEX をテーブル領域に employee_tblspc 移動します。

ALTER INDEX NAMEX
ALTER TABLESPACE employee_tblspc

Image 025.jpg テーブル領域からインデックスを削除する

このセクションでは、データベースからインデックスを削除する方法について説明します。

注意:
InterBase テーブル領域のコンテキストでは、テーブル領域からインデックスを削除すると、Primary または別の既存のテーブル領域に移動します。
ALTER INDEX {<tablespace_name> | PRIMARY}
    [ALTER TABLESPACE {<tablespace_name> | PRIMARY}]

まず ALTER INDEX を使用してインデックス NAMEX を変更し、その後、ALTER TABLESPACE を使用してインデックス NAMEXPrimary または別の既存のテーブル領域に移動します。

ALTER INDEX NAMEX
ALTER TABLESPACE primary

バックアップの時間です

チュートリアルのこのパートが正常に終了したら、ここでデータベースのバックアップをするといいでしょう。

次は: