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コードの1つの重要機能である一意性強要の能力を欠いています。 しかしながら、以下で述べるように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
に提供されます。
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
Teodor Sigaev(<teodor@stack.net>
)、
Oleg Bartunov(<oleg@sai.msu.su>
)、およびJanko Richter(<jankorichter@yahoo.de>
)。
追加情報はhttp://www.sai.msu.su/~megera/postgres/gist/を参照ください。