GiST 和 GIN 索引之间的区别

2024-03-19

我正在实现一个表,其中有一列的数据类型为tsvector我想了解什么索引更好使用?

GIN 还是 GiST?

在浏览中postgres 文档在这里 http://www.postgresql.org/docs/9.1/static/textsearch-indexes.html我似乎明白了:

  • GiST 更新和构建索引的速度更快,但准确性不如 gin。

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

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

有人可以用外行的术语解释一下我什么时候想使用 GIN 与 GiST 吗?


我认为我无法比这更好地解释它手册 http://www.postgresql.org/docs/9.4/textsearch-indexes.html已经这样做了:

在选择使用哪种索引类型(GiST 或 GIN)时,请考虑这些 性能差异:

  • GIN 索引查找速度大约是 GiST 的三倍

  • GIN 索引的构建时间大约是 GiST 的三倍

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

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

链接和引用请参阅Postgres 9.4的手册。规模和性能估计似乎已经有些过时了。随着 Postgres 9.4 的出现,可能性已经发生了很大的变化支持杜松子酒 http://www.sai.msu.su/%7Emegera/postgres//talks/329_PGCon2014-GIN.pdf.
The Postgres 9.4 的发行说明 http://www.postgresql.org/docs/9.4/release-9-4.html#AEN119229包括:

  • 减少 GIN 索引大小(Alexander Korotkov、Heikki Linnakangas)[...]

  • 提高多键 GIN 查找的速度 (Alexander Korotkov, Heikki 林纳坎加斯)

此后,尺寸和性能估计已从手册中删除。

请注意,有特殊用例 https://stackoverflow.com/questions/22658515/multicolumn-index-on-3-fields-with-heterogenous-data-types/22675324#22675324需要其中之一。

你误解了一件事:你never使用 GiST 索引得到错误的结果。该索引对哈希值进行操作,其中can导致指数出现误报。这应该只与文档中大量不同的单词相关。在任何情况下,重新检查实际行后都会消除误报。手册 http://www.postgresql.org/docs/current/textsearch-indexes.html:

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

大胆强调我的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GiST 和 GIN 索引之间的区别 的相关文章

随机推荐