构建 GiST 索引最简单的方法就是把所有项逐个插入。这对于大型索引往往很慢,因为如果索引元组分散在整个索引中,而索引又大到无法放入缓存,就需要大量随机 I/O。PostgreSQL支持两种用于 GiST 索引初始构建的替代方法:sorted和buffered模式。
只有当索引使用的每个操作符类都提供了sortsupport函数时,排序方法才可用,如Section 63.3所述。如果满足这一条件,这通常是最好的方法,因此默认使用它。
缓冲方法的做法是先不把元组直接插入索引。对于非有序数据集,它可以显著减少所需的随机 I/O 量。对于顺序良好的数据集,收益较小或者根本没有,因为一次只有少量页面会接收新元组,而这些页面即使整个索引放不进缓存,也能够放进缓存。
缓冲方法比简单方法更频繁地调用penalty函数,这会消耗一些额外的 CPU 资源。此外,缓冲区需要临时磁盘空间,最多可达最终索引的大小。缓冲还可能正面或负面地影响最终索引的质量。这种影响取决于多种因素,例如输入数据的分布以及操作符类的实现。
如果不能排序,那么默认情况下,当索引大小达到effective_cache_size时,GiST 索引构建会切换到缓冲方法。也可以通过 CREATE INDEX 命令的buffering参数手工强制启用或禁止缓冲。默认行为在大多数情况下都不错,但如果输入数据是有序的,关闭缓冲模式可能会略微加快构建速度。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。