在大多数情况下,因为需要为每个值插入多个相似的 key 的原因,向 GIN 索引插入是慢速操作。对于向表中大量插入的操作,我们建议先删除 GIN 索引,在完成插入之后在重建它。
开发 GIN 索引的主要目的是为了让 PostgreSQL 支持高度可升级的全文索引,并且常常会遇见全文索引返回海量结果的情形。此外,在查询高频词的时候得到的结果集没什么用处。因为从磁盘读取大量记录并对其进行排序会消耗大量资源,这在产品环境下是不能接受的(注意,索引搜索本身是很快的)。
为了易于控制这种情况,GIN 有一个可配置的结果集大小软上限配置参数 gin_fuzzy_search_limit 。缺省值 0 表示没有限制。如果设置了非零值,那么返回的结果就是从完整结果集中随机选择的一部分。
"软"的意识是实际返回的结果集大小可能与指定值稍有出入,具体取决于查询和系统的随机数发生器。