GiST和GIN指数之间的差异

时间:2015-03-10 22:47:58

标签: postgresql indexing full-text-search

我正在实现一个包含数据类型为tsvector的列的表,我试图了解哪种索引更适合使用?

GIN还是GiST?

在查看postgres documentation here时,我似乎得到了:

  • GiST更新和构建索引的速度更快,而且比杜松子酒更准确。

  • GIN更新和构建索引的速度较慢,但​​更准确。

好的,那么为什么有人想要一个gist索引字段而不是杜松子酒呢?如果要点可能会给你错误的结果?必须有一些优势(外部表现)。

当我想要使用GIN与GiST时,有人可以用外行的方式解释吗?

1 个答案:

答案 0 :(得分:62)

我认为我不能比the manual更好地解释它:

  

在选择要使用的索引类型,GiST或GIN时,请考虑这些   绩效差异:

     
      
  • GIN索引查找速度比GiST快

  • 快三倍   
  • GIN索引的构建时间比GiST大约长三倍

  •   
  • GIN索引的更新速度比GiST索引要慢,但如果禁用快速更新支持,则速度会慢10倍[...]

  •   
  • GIN索引比GiST索引大两到三倍

  •   

链接指向当前手册,引用来自版本9.4,而您的链接是版本9.1(出于某种原因?)。

手册中的尺寸和性能估算似乎略显过时 - 并且已被删除 With Postgres 9.4 the odds have shifted substantially in favor of GIN
release notes of Postgres 9.4包括:

  
      
  • 减少GIN指数(Alexander Korotkov,Heikki Linnakangas)[...]

  •   
  • 提高多键GIN查找的速度(Alexander Korotkov,Heikki   Linnakangas)

  •   

请注意,special use cases需要其中一个。

您误解的一件事:您 从不 使用GiST索引获取错误的结果。索引对哈希值进行操作,可以导致索引中出现误报。这应该只与文档中的大量不同单词相关。在任何情况下重新检查实际行后,都会消除误报。 The manual

  

GiST索引是有损的,这意味着索引可能会产生错误   匹配,有必要检查实际的表行   消除这种错误的比赛。 ( PostgreSQL会在需要时自动执行此操作。

大胆强调我的。