温馨提示:本文翻译自stackoverflow.com,查看原文请点击:postgresql - How does Postgres combine spatial and non-spatial data into one index
postgresql

postgresql - Postgres如何将空间和非空间数据合并为一个索引

发布于 2020-03-29 21:38:25

据我了解,我们可以在空间数据(例如地理空间)和非空间数据(例如时间)上创建多列索引。

我还读到Po​​stgres使用B +树作为时间戳,整数等默认数据结构,使用R树作为空间数据。

但是,我不明白如何将这两种数据类型(例如地理空间和时间戳)组合到一个索引中(就基础数据结构的外观而言)。

例如,如果我们在两个整数列上创建了索引,则将使用多列B + -tree数据结构(如此处所述https://www.qwertee.io/blog/postgresql-b-tree-index-解释的第1部分/)。

这将如何与空间和非空间一起使用?我们会在B树的叶子上嵌入R树吗?反之亦然?或者是其他东西?

任何澄清表示赞赏。

查看更多

提问者
user7641438
被浏览
13
Laurenz Albe 2020-01-31 18:21

GiST索引是B树索引的概括。

粗略地讲,区别在于非叶子页面中的每个下指不与两个值之间的间隔关联,而是与广义搜索条件关联。对于地理空间数据,此通用搜索条件是一个边界框:如果要搜索的项目与边界框重叠,则必须下降索引树的该分支。

由于GiST索引是广义的B树索引,因此很容易将B树索引实现为GiST索引的特例。通常不会执行此操作,因为常规B树索引已得到高度优化,并且性能会更好,但是它对于多列GiST索引很有用。

要将GiST索引与“常规”完全有序数据类型一起使用,您需要使用以下命令安装其他必需的运算符类:

CREATE EXTENSION btree_gist;