当前位置:  开发笔记 > 数据库 > 正文

PostgreSQL:GIN还是GiST索引?

如何解决《PostgreSQL:GIN还是GiST索引?》经验,为你挑选了1个好方法。

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

GIN索引查找速度比GiST快三倍

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

GIN索引的更新速度比GiST慢十倍

GIN索引比GiST大两到三倍

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



1> 小智..:

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


我认为生成自己的数据是唯一的答案.我花了几天时间阅读全文和空间关于gist和gin索引,插入索引或关闭,postgres.sql中的wal设置以及与#postgis /#postgresql上的人交谈并最终来到得出的结论是,对于我的具体用法,唯一可以确定的方法是加载具有大量实际数据子集的测试表,并进行测试.如果你在安装过程中匆匆忙忙地在这里或那里攒一天,那么你将在接下来的几年里浪费几周时间,我从经验中学到了很多东西.
是的,但问题是时间,如果有人已经知道,更明智的问一下......
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有