【发布时间】:2008-08-22 05:22:39
【问题描述】:
从我能找到的信息来看,它们都解决了相同的问题——更深奥的操作,如数组包含和交集(&&、@>、 PostgreSQL documentation 有一些关于此的信息:
- GIN 索引查找比 GiST 快大约三倍
- GIN 索引的构建时间大约是 GiST 的三倍
- GIN 索引的更新速度比 GiST 慢十倍
- GIN 索引比 GiST 大两到三倍
但是,我特别想知道当内存与索引大小的比率开始变小时(即索引大小变得比可用内存大得多)是否会对性能产生影响?我在#postgresql IRC 频道上被告知 GIN 需要将所有索引保存在内存中,否则它不会有效,因为与 B-Tree 不同,它不知道从磁盘读取哪个部分一个特定的查询?问题是:这是真的吗(因为我也被告知相反的情况)? GiST 有同样的限制吗?在使用其中一种索引算法时,我还应该注意其他限制吗?
【问题讨论】:
-
这些测量值因您使用的 PG 版本而异。我刚刚在 9.6.1 下针对 hstore 列进行了测试,得到以下结果:GiST 的构建时间比 GIN 长 4.1 倍,查找速度慢了大约 170 倍。甚至不接近你引用的数字。
标签: postgresql indexing gwt-gin gist-index