代码之家  ›  专栏  ›  技术社区  ›  Grey Panther

PostgreSQL:gin还是gist索引?

  •  38
  • Grey Panther  · 技术社区  · 17 年前

    从我所能找到的信息来看,它们都解决了同样的问题——更为深奥的操作,如数组包含和交集(&、@>、<@等)。不过,我会对何时使用其中一个或另一个(或者两者都不可能)的建议感兴趣。
    这个 PostgreSQL documentation 有一些关于这方面的信息:

    • GIN索引查找速度大约是GIST的三倍
    • GIN索引的构建时间大约是GIST的三倍。
    • GIN索引的更新速度大约是GIST的10倍。
    • 金酒指数是金酒指数的两到三倍。

    但是,当内存到索引大小的比率开始变小(即索引大小比可用内存大得多)时,我特别想知道是否存在性能影响?我在PostgreSQL IRC频道上被告知,Gin需要将所有索引保存在内存中,否则它将无效,因为与B-Tree不同,它不知道从磁盘读取哪个部分用于特定查询?问题是:这是真的吗(因为我也被告知与此相反)?GIST有相同的限制吗?在使用这些索引算法时,是否还有其他需要注意的限制?

    1 回复  |  直到 9 年前
        1
  •  15
  •   Andrea Bertani    17 年前

    首先,您需要将它们用于文本搜索索引吗?GIN和GIST是专门针对某些数据类型的索引。如果您需要索引简单的字符或整数值,那么普通的B树索引是最好的。
    不管怎样,PostgreSQL文档中有一章 GIST 还有一个 GIN ,在这里您可以找到更多信息。
    最后但并非最不重要的是,找到哪一个最好的方法是生成样本数据(尽可能多地需要成为一个真实的场景),然后创建一个gist索引,测量创建索引需要多少时间,插入一个新值,执行一个样本查询。然后删除索引,并对gin索引执行相同的操作。比较这些值,您将得到基于数据的所需答案。

    推荐文章