从我能找到的信息来看,它们都解决了相同的问题 - 更深奥的操作,如数组包含和交集(&&、@>、<@等)。不过,我对何时使用其中之一(或两者都不可能)的建议很感兴趣。
PostgreSQL 文档 有一些关于此的信息:

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

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

有帮助吗?

解决方案

首先,您是否需要使用它们进行文本搜索索引?GIN 和 GiST 是专门针对某些数据类型的索引。如果您需要索引简单的字符或整数值,那么普通的 B 树索引是最好的。
无论如何,PostgreSQL 文档有一章关于 要旨 和一上 杜松子酒, ,您可以在其中找到更多信息。
最后但并非最不重要的一点是,找到最佳方案的最佳方法是生成示例数据(根据实际场景需要多少),然后创建 GIST 索引,测量创建索引需要多少时间,插入新值,执行示例查询。然后删除索引并对 GIN 索引执行相同的操作。比较这些值,您将根据您的数据获得所需的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top