# F.18.内塔雷
F.18.1.内塔雷
函数和运算符F.18.2.索引支持F.18.3.实例F.18.4.基准F.18.5.作者
这个内塔雷
模块提供了许多有用的函数和运算符,用于操作无空整数数组。还支持使用一些运算符进行索引搜索。
如果提供的数组包含任何空元素,所有这些操作都将引发错误。
其中许多操作仅适用于一维阵列。虽然它们将接受更多维度的输入数组,但数据在存储顺序上被视为线性数组。
该模块被认为是“受信任的”,也就是说,它可以由拥有创造
当前数据库的权限。
# F.18.1.内塔雷
函数和运算符
表F.9.内塔雷
功能
表 F.10.数组内
运营商
操作员 描述 |
---|
整数[] && 整数[] → 布尔值 数组是否重叠(至少有一个共同元素)? |
整数[] @> 整数[] → 布尔值 左数组是否包含右数组? |
整数[] <@ 整数[] → 布尔值 左数组是否包含在右数组中? |
`` # 整数[] → 整数 返回数组中元素的数量。 |
整数[] # 整数 →整数 返回与右参数匹配的第一个数组元素的索引,如果不匹配,则返回 0.(如同 编号 功能。) |
整数[] + 整数 →整数[] 将元素添加到数组的末尾。 |
整数[] + 整数[] →整数[] 连接数组。 |
整数[] - 整数 →整数[] 从数组中删除匹配正确参数的条目。 |
整数[] - 整数[] →整数[] 从左数组中删除右数组的元素。 |
整数[] | 整数 →整数[] 计算参数的并集。 |
整数[] | 整数[] →整数[] 计算参数的并集。 |
整数[] & 整数[] →整数[] 计算参数的交集。 |
整数[] @@ 查询整数 →布尔值 数组是否满足查询?(见下文) |
查询整数 ~~ 整数[] →布尔值 数组是否满足查询?(换向器 @@ ) |
运营商&&
,@>
和<@
等效于 PostgreSQL 的同名内置运算符,只是它们仅适用于不包含空值的整数数组,而内置运算符适用于任何数组类型。在许多情况下,此限制使它们比内置运算符更快。
这@@
和~~
运算符测试数组是否满足询问,表示为特殊数据类型的值查询整数
.一种询问由针对数组元素检查的整数值组成,可能使用运算符组合&
(和),|
(或), 和!
(不是)。可以根据需要使用括号。例如,查询1&(2|3)
匹配包含1且同时包含2或3的数组。
# F.18.2.索引支持
内塔雷
为&&
,@>
和@@
运算符以及正则数组相等。
提供了两个参数化GiST索引运算符类:内部操作要点
(默认情况下使用)适用于中小型数据集,而大行动要点
使用更大的签名,更适合索引大型数据集(即,包含大量不同数组值的列)。该实现使用带有内置有损压缩的RD树数据结构。
内部操作要点
将整数集近似为整数范围数组。它的可选整数参数努姆兰吉斯
确定一个索引键中的最大范围数。的默认值努姆兰吉斯
是100.有效值介于1和253之间。使用较大的数组作为GiST索引键会导致更精确的搜索(扫描索引的较小部分和更少的堆页),但代价是索引较大。
大行动要点
将整数集近似为位图签名。它的可选整数参数西格伦
以字节为单位确定签名长度。默认签名长度为16字节。签名长度的有效值在1到2024字节之间。更长的签名会导致更精确的搜索(扫描更少的索引部分和更少的堆页),但代价是索引更大。
还有一个非默认的GIN操作符类金酒国际行动
,它支持这些运算符以及<@
.
GiST和GIN索引之间的选择取决于GiST和GIN的相对性能特征,这将在其他地方讨论。
# F.18.3.范例
-- a message can be in one or more “sections”
CREATE TABLE message (mid INT PRIMARY KEY, sections INT[], ...);
-- create specialized index with signature length of 32 bytes
CREATE INDEX message_rdtree_idx ON message USING GIST (sections gist__intbig_ops (siglen = 32));
-- select messages in section 1 OR 2 - OVERLAP operator
SELECT message.mid FROM message WHERE message.sections && '{1,2}';
-- select messages in sections 1 AND 2 - CONTAINS operator
SELECT message.mid FROM message WHERE message.sections @> '{1,2}';
-- the same, using QUERY operator
SELECT message.mid FROM message WHERE message.sections @@ '1&2'::query_int;
# F.18.4.基准
源目录contrib/intarray/bench
包含一个基准测试套件,可以在已安装的PostgreSQL server上运行。(它还要求DBD::Pg
待安装。)要运行:
cd .../contrib/intarray/bench
createdb TEST
psql -c "CREATE EXTENSION intarray" TEST
./create_test.pl | psql TEST
./bench.pl
这个长凳pl
脚本有许多选项,在不带任何参数的情况下运行时会显示这些选项。
# F.18.5.作者
所有的工作都是由特奥多尔·西格夫完成的(<[teodor@sigaev.ru](邮寄至:teodor@sigaev.ru)>
)还有奥列格·巴图诺夫(<[oleg@sai.msu.su](邮寄至:oleg@sai.msu.su)>
).看到了吗http://www.sai.msu.su/~梅格拉/博士后/吉斯特/ (opens new window)了解更多信息。Andrey Oktyabski在添加新功能和操作方面做了大量工作。