Wal*_*row 42 postgresql indexing full-text-search
我正在实现一个具有数据类型为的列的表,tsvector我试图了解哪个索引更适合使用?
GIN还是GiST?
通过这里查看postgres文档,我似乎得到了:
GiST更新和构建索引的速度更快,而且比杜松子酒更准确.
GIN更新和构建索引的速度较慢,但更准确.
好的,那么为什么有人想要杜松子酒的gist索引字段呢?如果要点可能会给你错误的结果?必须有一些优势(外部表现).
当我想要使用GIN和GiST时,有人可以用外行的方式解释吗?
Erw*_*ter 72
我认为我不能比手册更好地解释它:
在选择要使用的索引类型,GiST或GIN时,请考虑以下性能差异:
GIN索引查找速度比GiST快三倍
GIN索引的构建时间比GiST长大约三倍
GIN索引的更新速度比GiST索引要慢,但如果禁用快速更新支持则会慢10倍[...]
GIN索引比GiST索引大两到三倍
该链接指向当前手册,引用来自版本9.4,而您的链接是版本9.1(出于某种原因?).
手册中的尺寸和性能估计似乎略显过时 - 并且已被删除.
在Postgres 9.4中,赔率大幅度上升,有利于GIN.Postgres 9.4
的发行说明包括:
减少GIN指数大小(Alexander Korotkov,Heikki Linnakangas)[...]
提高多键GIN查找的速度(Alexander Korotkov,Heikki Linnakangas)
请注意,有一些特殊用例需要其中一个.
你误解了一件事:你从来没有用GiST索引得到错误的结果.索引对哈希值进行操作,这可能导致索引中出现误报.这应该只与文档中的大量不同单词相关.在任何情况下重新检查实际行后,都会消除误报.手册:
GiST索引是有损的,这意味着索引可能产生错误匹配,并且有必要检查实际的表行以消除这种错误匹配.(PostgreSQL会在需要时自动执行此操作.)
大胆强调我的.