选择 打开 改范围 完整检索页
受支持版本: 14
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本手册首页的对应页面,或其他在上面列出的活跃大版本。

64.4. 实现 #

64.4.1. GiST 缓冲构建 #

仅靠把所有元组逐个插入来构建大型 GiST 索引往往很慢,因为如果索引元组分散在整个索引中,而索引又大到无法放入缓存,插入时就需要大量随机 I/O。从版本 9.2 开始,PostgreSQL 支持一种更高效的、基于缓冲的 GiST 索引构建方法,对于非有序数据集,它可以显著减少所需的随机 I/O 次数。对于顺序良好的数据集,收益较小或者根本没有,因为一次只有少量页面会接收新元组,而这些页面即使整个索引放不进缓存,也能够放进缓存。

不过,缓冲索引构建需要更频繁地调用penalty函数,这会消耗一些额外的 CPU 资源。此外,缓冲区需要临时磁盘空间,最多可达最终索引的大小。缓冲还可能正面或负面地影响最终索引的质量。这种影响取决于多种因素,例如输入数据的分布以及操作符类的实现。

默认情况下,当索引大小达到effective_cache_size时,GiST 索引构建会切换到缓冲方法。也可以通过 CREATE INDEX 命令的buffering参数手工强制启用或禁止缓冲。默认行为在大多数情况下都不错,但如果输入数据是有序的,关闭缓冲模式可能会略微加快构建速度。