btree_gist

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 付録 F. 追加で提供されるモジュール | 早送り | 次のページ

# F.5. btree_gist

`btree_gist`は、次に列挙するデータ型に対しB-treeと同等な動作を実装するGiSTインデックス演算子クラスを提供します。データ型は、`int2`、`int4`、`int8`、`float4`、`float8`、`numeric`、`timestamp with time zone`、`timestamp without time zone`、`time with time zone`、`time without time zone`、`date`、`interval`、`oid`、`money`、`char`、`varchar`、`text`、`bytea`、 `bit`、`varbit`、`macaddr`、`inet`、および`cidr`です。

一般的に、これらの演算子クラスは同等な標準B-treeインデックス方式を性能的に凌駕する物ではなく、標準B-treeコードの１つの重要機能である一意性強要の能力を欠いています。 しかしながら、以下で述べるようにB-treeインデックスにはない特徴をいくつか備えています。 また、これらの演算子クラスは、GiSTでのみインデックス可能なデータ型の列もあれば、単純なデータ型の列もあるような複数列のGiSTインデックスが必要な場合に便利です。 最後に、GiSTの試験、およびその他のGiST演算子クラスの開発の基礎として便利です。

典型的なB-tree検索演算子に加えて、`btree_gist`は`<>`（"等しくない"）に対してもインデックスのサポートを提供します。 これは、後で述べるような排他制約と組み合わせると便利でしょう。

また、自然な距離のあるデータ型には、`btree_gist`は距離演算子`<->`を定義し、この演算子を使った最近接検索へのGiSTインデックスのサポートを提供します。 距離演算子は`int2`、`int4`、`int8`、`float4`、`float8`、`timestamp with time zone`、`timestamp without time zone`、`time without time zone`、`date`、`interval`、`oid`、`money`に提供されます。

## F.5.1. 使用例

`btree`の代わりに`btree_gist`を使った簡単な例

    CREATE TABLE test (a int4);
    -- インデックスの作成
    CREATE INDEX testidx ON test USING gist (a);
    -- 問い合わせ
    SELECT * FROM test WHERE a < 10;
    -- 最近接検索: "42"に一番近い10個のエントリを見つける
    SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;

動物園の一つの檻に1種類の動物しかいないというルールを強制するために排他制約を使います。

    => CREATE TABLE zoo (
      cage   INTEGER,
      animal TEXT,
      EXCLUDE USING gist (cage WITH =, animal WITH <>)
    );

    => INSERT INTO zoo VALUES(123, 'zebra');
    INSERT 0 1
    => INSERT INTO zoo VALUES(123, 'zebra');
    INSERT 0 1
    => INSERT INTO zoo VALUES(123, 'lion');
    ERROR:  conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
    DETAIL:  Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).
    => INSERT INTO zoo VALUES(124, 'lion');
    INSERT 0 1

## F.5.2. 著作者

Teodor Sigaev（`<teodor@stack.net>`）、 Oleg Bartunov（`<oleg@sai.msu.su>`）、およびJanko Richter（`<jankorichter@yahoo.de>`）。追加情報はhttp://www.sai.msu.su/~megera/postgres/gist/を参照ください。

前のページ | ホーム | 次のページ
btree_gin | 上に戻る | chkpass