据我所知,我们可以为空间数据(例如地理空间)和非空间数据(例如时间)创建多列索引。
我还读到 Postgres 使用 B+ 树作为时间戳、整数等的默认数据结构,并使用 R 树作为空间数据。
但是我不明白如何将这两种数据类型(例如地理空间和时间戳)组合成一个索引(就底层数据结构的样子而言)。
例如,如果我们在两个整数列上创建了索引,我们将使用多列 B+ 树数据结构(如此处所述 https://www.qwertee.io/blog/postgresql-b-tree-index-explained-part-1/ )。
这将如何处理空间和非空间?我们会在 B 树的叶子上嵌入 R 树,还是相反?还是别的?
如有任何澄清,我们将不胜感激。
最佳答案
GiST 索引是 B 树索引的推广。
粗略地说,不同之处在于非叶子页面中的每个向下指针与两个值之间的间隔无关,而是与广义搜索条件相关联。在地理空间数据的情况下,这个广义搜索条件是一个边界框:如果您搜索的项目与边界框重叠,则必须下降索引树的那个分支。
由于 GiST 索引是广义 B 树索引,因此很容易将 B 树索引作为 GiST 索引的特例来实现。通常不会这样做,因为常规 B 树索引经过高度优化,性能会更好,但它对多列 GiST 索引很有用。
要使用具有“常规”完全有序数据类型的 GiST 索引,您需要安装额外的所需运算符类
CREATE EXTENSION btree_gist;
关于postgresql - Postgres 如何将空间和非空间数据合并到一个索引中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001727/