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