↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 16 / 15 / 14
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

68.4. 实现 #

68.4.1. GiST 索引构建方法 #

构建 GiST 索引最简单的方法就是把所有项逐个插入。这对于大型索引往往很慢,因为如果索引元组分散在整个索引中,而索引又大到无法放入缓存,就需要大量随机 I/O。PostgreSQL 支持两种用于 GiST 索引初始构建的替代方法:排序和缓冲模式。

只有当索引使用的每个操作符类都提供了 sortsupport 函数时,排序方法才可用,如第 68.3 节所述。如果满足这一条件,这通常是最好的方法,因此默认使用它。

缓冲方法的做法是先不把元组直接插入索引。对于非有序数据集,它可以显著减少所需的随机 I/O 量。对于顺序良好的数据集,收益较小或者根本没有,因为一次只有少量页面会接收新元组,而这些页面即使整个索引放不进缓存,也能够放进缓存。

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

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

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.