据我了解,我们可以在空间数据(例如地理空间)和非空间数据(例如时间)上创建多列索引。
我还读到Postgres使用B +树作为时间戳,整数等默认数据结构,使用R树作为空间数据。
但是,我不明白如何将这两种数据类型(例如地理空间和时间戳)组合到一个索引中(就基础数据结构的外观而言)。
例如,如果我们在两个整数列上创建了索引,则将使用多列B + -tree数据结构(如此处所述https://www.qwertee.io/blog/postgresql-b-tree-index-解释的第1部分/)。
这将如何与空间和非空间一起使用?我们会在B树的叶子上嵌入R树吗?反之亦然?或者是其他东西?
任何澄清表示赞赏。
GiST索引是B树索引的概括。
粗略地讲,区别在于非叶子页面中的每个下指不与两个值之间的间隔关联,而是与广义搜索条件关联。对于地理空间数据,此通用搜索条件是一个边界框:如果要搜索的项目与边界框重叠,则必须下降索引树的该分支。
由于GiST索引是广义的B树索引,因此很容易将B树索引实现为GiST索引的特例。通常不会执行此操作,因为常规B树索引已得到高度优化,并且性能会更好,但是它对于多列GiST索引很有用。
要将GiST索引与“常规”完全有序数据类型一起使用,您需要使用以下命令安装其他必需的运算符类:
CREATE EXTENSION btree_gist;