CREATE INDEX

Name

CREATE INDEX  --  補助的インデックスを作成します。

Synopsis

CREATE [ UNIQUE ] INDEX index_name
    ON table [ USING acc_name ]
    ( column [ ops_name] [, ...] )
CREATE [ UNIQUE ] INDEX index_name
    ON table [ USING acc_name ]
    ( func_name( r">colle> [, ... ]) ops_name )
  

入力

UNIQUE

テーブルに(既にデータがあり)インデックスが作成されたときと、 データが追加される毎に値が重複していないかをチェックします。 重複行を作成するようなデータの挿入または更新はエラーとなります。

index_name

作成されるインデックスの名前です。

table

インデックスが付けられるテーブルの名前です。

acc_name

インデックスに用いられるアクセスメソッドの名前です。 デフォルトのアクセスメソッドは BTREE です。 Postgres は補助的インデックスに対して 3 つのアクセスメソッド を提供しています。

BTREE

Lehman-Yao による高度の同時性を有した btrees の 実装です。

RTREE

は Guttman の 2 次分割アルゴリズムを使用して 標準 の rtrees を実装します。

HASH

Litwin の線形ハッシングの実装です。

column

テーブルのカラムの名前です。

ops_name

対応する演算子のクラスです。 以下の select 文は全ての ops_names を返します。 ※ 訳注:演算子クラス(オペレータクラス)については 片岡裕生氏(mailto:kataoka@interwiz.koganei.ktoyo.jp) による判りやすい説明が「ソフトウェアデザイン」 6 月号に掲載しあり、それによると、オペレータクラス は「物の尺度」つまりどのように物を比較するかの判断 基準を表現していると解説しています。

SELECT am.amname AS acc_name,
       opc.opcname AS ops_name,
       opr.oprname AS ops_comp
    FROM pg_am am, pg_amop amop,
         pg_opclass opc, pg_operator opr
    WHERE amop.amopid = am.oid AND
          amop.amopclaid = opc.oid AND
          amop.amopopr = opr.oid
    ORDER BY acc_name, ops_name, ops_comp
	

func_name

インデックス付けされる値を返す、ユーザ定義の関数です。

出力

CREATE

インデックスが正常に作成された場合に返されるメッセージです。

ERROR: Cannot create index: 'index_name' already exists.

インデックスを作成出来なかった場合に出力されるエラーです。

説明

CREATE INDEX はインデックス index_name を指定されたテーブル table 上に構成します。

Tip: インデックスは主としてデータベースの効率を向上する ために使用されますが、適切な方法で使用しないと逆に 効率を落すことになります。

上記の最初の構文では、インデックスに対するキーフィールドは カラムの名前として指定されていて、そのカラムも対応する 演算子クラスを持っていることがあります。 演算子クラスはある特定のインデックスで使用 される演算子を特定する場合に使用されます。例えば、4 バイト の整数上の btree インデックスは int4_ops クラスを使用し、この演算子クラスは 4 バイト整数を比較する 機能を持っています。デフォルトの演算子クラスはそのフィールド 型に対して適切な演算子クラスです。

第二の構文では、ある一つのクラスの一つまたは複数の 属性に適用されるユーザ定義関数 func_name の結果に従ってインデックスが指定されます。 これらの関数によるインデックスは、データベースに適用する際、 何らかの変換が必要とされる演算子に基づいてデータに高速に アクセスするときに使用することが出来ます。

注意事項

現時点では、 BTREE アクセスメソッドのみが複数カラムインデックス をサポートしています。

インデックスを削除するには DROP INDEX を使います。

使用法

テーブル films 内のフィールド title 上に btree インデックスを作成 するには:

CREATE UNIQUE INDEX title_idx
    ON films (title);
  

と書きます。

互換性

SQL92

CREATE INDEX は Postgres の 拡張言語です。

SQL92 に CREATE INDEX コマンドはありません。