根据我能找到的信息,他们都解决了同样的问题 - 更多深奥的操作,如数组包含和交集(&&,@>,<@等)。 但是我会对何时使用其中一个(或两者都不可能)的建议感兴趣。
PostgreSQL文档提供了一些有关此内容的信息:

  • GIN索引查找速度比GiST快三倍
  • GIN索引的构建时间比GiST长大约三倍
  • GIN索引的更新速度比GiST慢十倍
  • GIN索引比GiST大两到三倍

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

===============>>#1 票数:15 已采纳

首先,您是否需要将它们用于文本搜索索引? GIN和GiST是某些数据类型的索引。 如果需要索引简单的char或整数值,那么正常的B-Tree索引是最好的。
无论如何,PostgreSQL文档有一章关于GIST ,一章关于GIN ,在那里你可以找到更多信息。
最后但并非最不重要的是,找到最佳方法的最佳方法是生成样本数据(尽可能多地为实际场景),然后创建GIST索引,测量创建索引所需的时间,插入新值,执行示例查询。 然后删除索引并使用GIN索引执行相同操作。 比较这些值,您将获得所需的答案,具体取决于您的数据。

  ask by Grey Panther translate from so

未解决问题?本站智能推荐:

1回复

Postgres hstore:GIN vs GiST索引表现

我必须决定是否对hstore列使用GIN或GiST索引。 Postgres文档指出: GIN索引查找速度比GiST快三倍 GIN索引的构建时间比GiST长大约三倍 GIN索引的更新速度比GiST慢十倍 GIN索引比GiST大两到三倍 我解释它的方式
1回复

在PostgreSQL上创建GIST索引太慢

我在PostgreSQL中有一个具有以下结构的数据库: 该数据库包含约146.000.000条记录,包含该数据的表的大小为: 我尝试使用以下命令在几何字段the_geom上创建GIST索引: 但是需要太长时间。 它已经运行了2个小时。 基于此问题300GB Pos
2回复

如何在postgresql gist索引类型中使用uuid?

我不能直接使用uist和gist索引 我收到了这个错误: 错误:数据类型uuid没有访问方法“gist”的默认运算符类 提示:您必须为索引指定运算符类,或者为数据类型定义默认运算符类。
4回复

B-Tree和GiST索引方法之间有什么区别(在PostgreSQL中)?

我最近一直在努力优化我的Postgres数据库,传统上,我只使用B-Tree索引。 但是,我在Postgres 8.3文档中看到GiST索引支持非唯一的多列索引。 但是,我不能看出它们之间的实际区别是什么。 我希望我的同事们能够解释一下,他们之间的利弊是什么,更重要的是,我之所以使用其
1回复

PostgreSQL daterange没有正确使用索引

我有一个简单的表,其user_birthday字段具有日期类型(可以是NULL值) 在该字段上定义了一个索引(btree),其中NOT user_birthday规则为NULL。 为了跟进另一个想法,我添加了扩展名btree_gist并创建了以下索引: 但它也没有任何影响
1回复

postgresql:读取GIN索引内容

我想阅读据推测是用我的GIN索引创建的三元组列表,但是我似乎在任何地方都找不到该命令:我尝试了\\di+ , \\dv+ , \\dm+或每个不带+ 。 一无所有。 我误会了什么还是我的索引为空? 它显示的大小为16ko,但据我所知可能是空的标准大小。
1回复

Postgres GIN索引未通过Liquibase脚本创建

我正在尝试通过liquibase脚本创建GIN索引。 每次liquibae变更集的迁移都会失败,但以下情况除外: liquibase.exception.DatabaseException:错误:访问方法“ gin”的操作符类“ gin_trgm_ops”不存在 问题是
1回复

从Postgres 9.1中的tsvector列上的GIN索引中检索键

我有一些文档集合,我想在Postgres 9.1中进行全文搜索,因此将它们添加为tsvector的内容然后在此列上创建GIN索引似乎很简单。 我对GIN索引的理解是,使用的密钥是(在所使用的文本搜索配置上加上)原始单词列表或原始文档集合中的规范化词汇。 但是,对于我们开发的其他功能,我非常希
1回复

使用包含XML标签的列在表上使用gin索引进行快速查询

我有一个非常大的知识库(Yago2),其中包含XMl标签形式的列,例如'<Albert_Einstein>' 。 在我的用例中,性能非常重要,因此我创建了一个像这样的gin索引: 现在我想用 但是,它不会返回任何结果,因为它无法在XML标记中搜索。 我看到了一个可
1回复

PostgreSQL tsvector解析包括搜索中的xml标记

我们将“破碎的”xml存储在表格的文本字段中。 目前无法修复xml,因此正常使用模式是使用where子句中的〜* E'my_regex'搜索它。 挑战在于桌子的大小非常大。 我正在尝试使用gin索引来更快地进行查询。 问题是,在将文本解析为tsvector时,解析器会忽略xml标记。