無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

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コードの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 に提供されます。

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( )、 Oleg Bartunov( )、およびJanko Richter( )。追加情報は http://www.sai.msu.su/~megera/postgres/gist/ を参照ください。


powered by SEO.CUG.NET