# F.7.B树_主旨
btree_gist
提供GiST索引运算符类,这些类实现数据类型的B树等效行为int2
,int4
,int8
,浮动4
,浮动8
,数字的
,带时区的时间戳
,不带时区的时间戳
,带时区的时间
,没有时区的时间
, 日期
, 间隔
, 老年人
, 钱
, 烧焦
, 瓦尔查尔
, 文本
, 二进制数据
, 一点
, 瓦比特
, 马卡德尔
, macaddr8
, 内特
, 苹果酒
, 乌伊德
,等等枚举
类型。
一般来说,这些运算符类的性能不会超过等效的标准B树索引方法,而且它们缺少标准B树代码的一个主要特性:强制唯一性的能力。但是,它们还提供了一些B树索引无法提供的其他功能,如下所述。此外,当需要多列GiST索引时,这些运算符类也很有用,其中一些列的数据类型只能用GiST索引,而其他列只是简单的数据类型。最后,这些操作符类对于GiST测试非常有用,并且可以作为开发其他GiST操作符类的基础。
除了典型的B-树搜索操作符,btree_gist
还为<>
(“不平等”)。这可能与排除约束,如下所述。
此外,对于具有自然距离度量的数据类型,btree_gist
定义距离运算符<->
,并使用此运算符为最近邻搜索提供GiST索引支持。为用户提供了距离操作符int2
, int4
, int8
, 浮动4
, 浮动8
, 带时区的时间戳
, 不带时区的时间戳
, 没有时区的时间
, 日期
, 间隔
, 老年人
和钱
.
该模块被认为是“受信任的”,也就是说,它可以由拥有创造
当前数据库的权限。
# F.7.1.示例用法
使用btree_gist
而不是B树
:
CREATE TABLE test (a int4);
-- create index
CREATE INDEX testidx ON test USING GIST (a);
-- query
SELECT * FROM test WHERE a < 10;
-- nearest-neighbor search: find the ten entries closest to "42"
SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10;
使用排除约束为了执行动物园笼子只能容纳一种动物的规定:
=> 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.7.2.作者
特奥多尔·西加耶夫(<[teodor@stack.net](邮寄至:teodor@stack.net)>
),奥列格·巴图诺夫(<[oleg@sai.msu.su](邮寄至:oleg@sai.msu.su)>
)詹科·里克特(<[jankorichter@yahoo.de](邮寄至:jankorichter@yahoo.de)>
)和保罗·荣沃思(<[pj@illuminatedcomputing.com](邮寄至:pj@illuminatedcomputing.com)>
).看到了吗http://www.sai.msu.su/~梅格拉/博士后/吉斯特/ (opens new window)了解更多信息。