9.3 9.4 9.5 9.6 10 11 12 13 14
阿里云PostgreSQL 问题报告 纠错本页面

65.4. 实现

65.4.1. GiST 索引构建方法

65.4.1. GiST 索引构建方法

构建GiST索引最简单的方法就是插入全部条目,一个接一个。 对大的索引这个会趋向于变慢,因为如果索引元组是分散的跨越索引,并且索引大到Cache容不下的时候,将会需要大量随机I/O。 PostgreSQL支持两个可供选择的方法以供GiST索引的初始化构建:sortedbuffered 方法。

排序(sorted)的方法仅在用于索引的每个opclasses提供sortsupport函数的时候有效,就像第 65.3 节中所描述的。 如果满足,这个方法通常是最好的,所以它是缺省使用的。

缓冲(buffered)的方法不直接立刻插入元组到索引。 它能明显的减少非排序数据集所需要的随机I/O的数量。 对于良好排序的数据集,这个收益很小甚至不存在,因为那时只有少数页面会接收新元组,并且那些页面也适合缓存,即便整个索引不能放在缓存中。

缓冲方法比简单的方法需要更频繁的调用penalty,这样会消耗额外的CPU资源。 还有,缓冲需要临时磁盘空间,最大为结果索引的尺寸。 缓冲也可能影响结果索引的质量,不管是正向还是负向。 这种影响取决于多种因素,如输入数据的分布和操作符类的实现。

如果排序为不可能,则默认情况下,当索引尺寸达到effective_cache_size时,一个 GiST 索引构建会切换到缓冲方法。 缓冲可以通过 CREATE INDEX 命令的buffering参数手工强制或阻止。 默认行为对大部分情况是好的,但是如果输入数据是排序好的,关闭缓冲特性可能会加速构建过程。