演算子クラス

PostgreSQL 8.0.0 文書
前のページ | 巻戻し | 第 11章インデックス | 早送り | 次のページ

# 11.6. 演算子クラス

インデックス定義では、インデックスの各列に演算子クラスを指定することができます。

    CREATE INDEX name ON table (column opclass [, ...]);

演算子クラスにより、その列のインデックスで使用される演算子が特定されます。 例えば、`int4`に付けたB-treeインデックスには、`int4_ops`クラスを使用します。 この演算子クラスには、`int4`値用の比較関数が含まれています。 実際には、通常、列のデータ型のデフォルト演算子クラスで十分です。 演算子クラスの主な意義は、複数の有意義なインデックスの振舞いを持つ、いくつかのデータ型用です。 例えば、複素数データ型を、絶対値と実数部のどちらかでソートする必要があるとします。 この処理は、そのデータ型の2つの演算子クラスを定義した上で、インデックスを作成する際に適切なクラスを選択することで、実行可能です。

以下のように、デフォルトの演算子クラスとは別に、組み込み演算子クラスがいくつかあります。

- `text_pattern_ops`、`varchar_pattern_ops`、`bpchar_pattern_ops`および`name_pattern_ops`演算子クラスは、それぞれ、`text`、`varchar`、`char`および`name`型上のB-treeインデックスをサポートします。 通常の演算子クラスとの違いは、ロケール特有の照合規則に従わずに、文字同士を厳密に比較する点です。 これらの演算子を、標準"C"ロケールを使用しないサーバにおける、パターンマッチ式(`LIKE`やPOSIX正規表現)を含む問い合わせでの使用に適したものにします。 例えば、以下のように`varchar`のインデックスを作成できます。

      CREATE INDEX test_index ON test_table (col varchar_pattern_ops);

  Cロケールを使用する場合は、デフォルトの演算子クラスでインデックスを作成しても構いません。 その時でもパターンマッチ問い合わせで有用です。 また、通常の比較を含む問い合わせでインデックスを使用したいのであれば、デフォルトの演算子クラスでインデックスを作成しなければならないことに注意してください。 こうした問い合わせでは``xxx`_pattern_ops`演算子クラスを使用することができません。 異なる演算子クラスで使用する列と同じ列に対して複数のインデックスを作成することができます。

以下の問い合わせは、定義済みの演算子クラスを全て返します。

    SELECT am.amname AS index_method,
           opc.opcname AS opclass_name
        FROM pg_am am, pg_opclass opc
        WHERE opc.opcamid = am.oid
        ORDER BY index_method, opclass_name;

この問い合わせは、以下のようにすると、各クラスに含まれる演算子を全て返すように拡張可能です。

    SELECT am.amname AS index_method,
           opc.opcname AS opclass_name,
           opr.oprname AS opclass_operator
        FROM pg_am am, pg_opclass opc, pg_amop amop, pg_operator opr
        WHERE opc.opcamid = am.oid AND
              amop.amopclaid = opc.oid AND
              amop.amopopr = opr.oid
        ORDER BY index_method, opclass_name, opclass_operator;

前のページ | ホーム | 次のページ
式に対するインデックス | 上に戻る | 部分インデックス