实现

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 56. GiST索引 | 下一页

# 56.4. 实现

## 56.4.1. 缓存的GiST创建

通过插入所有元组来创建一个很大GiST索引通常速度会很慢。 因为如果索引元组被分散到索引的各个地方，并且索引因为太大而不能完全放入缓存，那么插入将需要触发很多随机IO。 从9.2版开始，PostgreSQL支持更加高效的基于缓存的GiST索引创建方法,这种方法可以极大地减少非排序数据集所需的随机IO。 但对于很好地排序过的数据集，这种方法效果甚微，甚至完全没有。 因为这种情况下一次只有少量的页接收新元组，即使整个索引不能放入缓存，这些页却可以完全放到缓存里。

但是，缓存的索引创建需要更多地调用`penalty`函数，这会消耗一些额外的CPU资源。 而且，缓存的索引创建使用的缓存需要占用临时的磁盘空间，最大为索引的最终大小。 缓存也可能影响最终生成的索引的质量，既有正面的也有负面的影响。 影响依赖于不同的因素，比如输入数据的分布和操作符类的实现。

缺省情况下，当索引大小达到effective_cache_size时，GiST索引创建会切换到缓存方式。 在执行CREATE INDEX命令时，也可以通过`BUFFERING`参数手动打开或关闭缓存方式。 缺省行为在大多数场合都是合适的，但是如果输入的数据是排过序的，关闭缓存可能多少会快一点。

上一页 | 起始页 | 下一页
扩展性 | 上一级 | 例