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 )
テーブルに(既にデータがあり)インデックスが作成されたときと、 データが追加される毎に値が重複していないかをチェックします。 重複行を作成するようなデータの挿入または更新はエラーとなります。
作成されるインデックスの名前です。
インデックスが付けられるテーブルの名前です。
インデックスに用いられるアクセスメソッドの名前です。 デフォルトのアクセスメソッドは BTREE です。 Postgres は補助的インデックスに対して 3 つのアクセスメソッド を提供しています。
Lehman-Yao による高度の同時性を有した btrees の 実装です。
は Guttman の 2 次分割アルゴリズムを使用して 標準 の rtrees を実装します。
Litwin の線形ハッシングの実装です。
テーブルのカラムの名前です。
対応する演算子のクラスです。 以下の 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
インデックス付けされる値を返す、ユーザ定義の関数です。
CREATE INDEX はインデックス index_name を指定されたテーブル table 上に構成します。
Tip: インデックスは主としてデータベースの効率を向上する ために使用されますが、適切な方法で使用しないと逆に 効率を落すことになります。
上記の最初の構文では、インデックスに対するキーフィールドは カラムの名前として指定されていて、そのカラムも対応する 演算子クラスを持っていることがあります。 演算子クラスはある特定のインデックスで使用 される演算子を特定する場合に使用されます。例えば、4 バイト の整数上の btree インデックスは int4_ops クラスを使用し、この演算子クラスは 4 バイト整数を比較する 機能を持っています。デフォルトの演算子クラスはそのフィールド 型に対して適切な演算子クラスです。
第二の構文では、ある一つのクラスの一つまたは複数の 属性に適用されるユーザ定義関数 func_name の結果に従ってインデックスが指定されます。 これらの関数によるインデックスは、データベースに適用する際、 何らかの変換が必要とされる演算子に基づいてデータに高速に アクセスするときに使用することが出来ます。