インデックス定義はインデックスのそれぞれのカラムに 演算子クラスを指定することができます。
CREATE INDEX name ON table (column opclass [, ...]);
演算子クラスは、インデックスがそのカラムのために使う演算子を特定します。
例えば、4 バイトの整数の B-tree インデックスはint4_ops
を使います。この演算子クラスは 4 バイト整数の比較関数を含んでいます。
実際には、カラムのデータ型のデフォルト演算子クラスで普通は十分です。
演算子クラスを持つことの大きな意味は、いくつかのデータ型にはひとつ
以上の意味のある順番があり得るということです。例えば、複素数データ型
を絶対値か実数部でソートしたいということがあるかもしれません。
これはデータ型の二つの演算子クラスを定義し、インデックスを作る時に
相応しいクラスを選択することで可能です。他にも、特別な目的のための
演算子クラスがいくつかあります。
演算子クラスbox_opsとbigbox_ops は両方とも R-tree インデックスをboxデータ型 でサポートしています。これらの違いは、bigbox_ops は浮動小数点の例外が非常に大きな浮動小数点の座標で積算、加算、減算 の際に発生することを回避するために、ボックス座標を縮小するという点です。 もし矩形があるフィールドが 20 000 ユニット平方かそれ以上の場合は、 bigbox_opsを使うべきでしょう。
次の問い合わせは全ての定義された演算子クラスをあらわしています。
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;