根据我能找到的信息,他们都解决了同样的问题 - 更多深奥的操作,如数组包含和交集(&&,@>,<@等)。 但是我会对何时使用其中一个(或两者都不可能)的建议感兴趣。
PostgreSQL文档提供了一些有关此内容的信息:

  • GIN索引查找速度比GiST快三倍
  • GIN索引的构建时间比GiST长大约三倍
  • GIN索引的更新速度比GiST慢十倍
  • GIN索引比GiST大两到三倍

但是,当内存到索引大小比例开始变小(即索引大小变得比可用内存大得多)时,我会特别感兴趣地知道是否存在性能影响? 我在#postgresql IRC频道上被告知GIN需要将所有索引保留在内存中,否则它将无效,因为与B-Tree不同,它不知道从磁盘读入哪个部分一个特定的查询? 问题是:这是真的(因为我也被告知与此相反)? GiST是否有相同的限制? 在使用这些索引算法之一时,我应该注意其他限制吗?

===============>>#1 票数:15 已采纳

首先,您是否需要将它们用于文本搜索索引? GIN和GiST是某些数据类型的索引。 如果需要索引简单的char或整数值,那么正常的B-Tree索引是最好的。
无论如何,PostgreSQL文档有一章关于GIST ,一章关于GIN ,在那里你可以找到更多信息。
最后但并非最不重要的是,找到最佳方法的最佳方法是生成样本数据(尽可能多地为实际场景),然后创建GIST索引,测量创建索引所需的时间,插入新值,执行示例查询。 然后删除索引并使用GIN索引执行相同操作。 比较这些值,您将获得所需的答案,具体取决于您的数据。

  ask by Grey Panther translate from so

未解决问题?本站智能推荐: