PostgreSQL:GIN或GiST索引?

从我能find什么信息,他们都解决了相同的问题 – 比如数组遏制和交集(&&,@>,<@等)更深奥的操作。 不过,我会有兴趣的时候使用一个或其他(或不可能)的build议。
PostgreSQL文档有这方面的一些信息:

  • GIN索引查找比GiST快三倍
  • GIN指数比GiST要长三倍
  • GIN索引比GiST更新慢十倍
  • GIN索引是GiST的两到三倍

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

首先,你需要使用它们进行文本search索引吗? GIN和GiST是某些数据types专用的索引。 如果你需要索引简单的字符或整数值,那么正常的B树索引是最好的。
无论如何,PostgreSQL文档在GIST上有一章,在GIN上有一章,您可以在这里find更多信息。
最后但并非最不重要的一点是,find最好的最好方法是生成样本数据(尽可能多地构build一个真实的场景),然后创build一个GIST索引,测量需要多less时间来创build索引,插入一个新的值,执行一个示例查询。 然后放下索引,并用GIN索引来做同样的事情。 比较这些值,根据您的数据,您将得到您需要的答案。

Interesting Posts