1 插件 btree_gist 简介
btree_gist 为以下数据类型提供了 B 树等价行为的 GIST 操作符类
uuid oid int2 int4 int8 float4 float8 timestamp timestamptz
time timetz date interval cash macaddr text bpchar bytea
numeric bit vbit inet cidr macaddr8 enum
一般情况下,这些操作符类不会比 B 树的表现更好,而且缺少 B 树最重要的特性之一支持唯一索引。但这些操 作符可以用于 GiST 测试或是作为其他 GiST 操作符类开发的参考。在特定情况下,例如查询同时涉及一列适合 GiST 索引的列和一列适合 B 树索引的列,这时创建 GiST 的两列联合索引可能比创建 GiST 索引和 B 树索引再通过位图 与扫描方式查询效率更高。
插件还提供了 B 树索引不支持的“<>”(不等于)操作符,这在创建 EXCLUDE 约束时很有用。插件对于可 以作为距离度量的数据类型提供了距离操作符 ,为使用这个操作符的最近邻搜索提供了 GiST 索引支持。
插件可 以被任何在当前库具有 CREATE 权限的用户创建。
• 插件名为 btree_gist
• 插件版本 V1.5
2 插件 btree_gist 加载方式
KingbaseES 默认不加载 btree_gist 插件,需要用户使用示例中的命令,人为手工加载。
示例:
CREATE EXTENSION btree_gist;
3 插件 btree_gist 的参数配置
无需配置任何参数
4 插件 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;
-- 使用 EXCLUDE 约束来创建规则一个动物园里的一个笼子只能装一种动物
CREATE TABLE zoo ( cage INTEGER, animal TEXT, EXCLUDE USING GIST (cage WITH =, animal WITH <>) );
INSERT INTO zoo VALUES(123, 'zebra');
INSERT INTO zoo VALUES(123, 'zebra');
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');
5 插件 btree_gist 卸载方法
btree_gist 插件的卸载也需要用户使用示例中的命令,人为手工卸载。
示例:
DROP EXTENSION btree_gist;
6 插件 btree_gist 升级方法
通过 ALTER EXTENSION 升级插件。
示例,升级到 1.1
ALTER EXTENSION btree_gist UPDATE TO '1.1';