🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# F.5\. btree_gist `btree_gist`提供 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树索引方法, 他们缺乏标准B树代码的一个主要特点:强制唯一性的能力。然而, 它们提供一些不可用于B树索引的其他功能,正如下面描述的。 另外当需要多列GiST索引时, 这些操作符类是有用的, 其中一些列是唯一可以使用GiST可索引的数据类型 但是其他列仅仅是简单的数据类型。 最终,这些操作符类对GiST测试是有用的, 并且作为开发其他GiST操作符类的基础。 除了典型的B树搜索操作符,`btree_gist` 还提供索引支持`&lt;&gt;` ("不等")。 这可能在与 [exclusion constraint](#calibre_link-1064)结合中很用, 正如下面描述。 另外,对于数据类型是一种天然的距离度量, `btree_gist`定义了一个距离操作符`&lt;-&gt;`, 并且使用该操作符为最近相邻搜索提供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_gist`而不是`btree`的简单例子: ``` CREATE TABLE test (a int4); -- 创建索引 CREATE INDEX testidx ON test USING gist (a); -- 查询 SELECT * FROM test WHERE a < 10; -- 最近相邻搜索:找到最接近"42"的十项 SELECT *, a <-> 42 AS dist FROM test ORDER BY a <-> 42 LIMIT 10; ``` 使用[排斥约束](#calibre_link-1064)可以执行该规则 动物园笼子里只能包含一种动物: ``` => 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 (`&lt;[teodor@stack.net](mailto:teodor@stack.net)&gt;`), Oleg Bartunov (`&lt;[oleg@sai.msu.su](mailto:oleg@sai.msu.su)&gt;`)和 Janko Richter (`&lt;[jankorichter@yahoo.de](mailto:jankorichter@yahoo.de)&gt;`)。参阅 [http://www.sai.msu.su/~megera/postgres/gist/](http://www.sai.msu.su/~megera/postgres/gist/) 获取额外信息。