Ash*_*Ash 17 postgresql indexing b-tree gist-index
我最近一直在努力优化我的Postgres数据库,传统上,我只使用B-Tree索引.但是,我在Postgres 8.3文档中看到GiST索引支持非唯一的多列索引.
但是,我不能看出它们之间的实际区别是什么.我希望我的同事们能够解释一下,他们之间的利弊是什么,更重要的是,我之所以使用其中一个的原因是什么?
kqu*_*inn 23
简而言之:B-Tree索引表现更好,但GiST索引更灵活.通常,如果B-Tree索引适用于您的数据类型,则需要它们.PG名单上最近有一篇关于使用GiST索引的巨大性能损失的帖子; 他们预计将比B-树要慢一些(例如是灵活的价格),但不能说慢得多......工作,正如你所预料的,持续的.
来自PostgreSQL核心开发人员Tom Lane的帖子:
GIST的要点是能够索引在btree中不可索引的查询....人们完全希望btree能够击败BIST可转换的btree案例.我认为这里重要的一点是,它赢了几百倍; 这非常糟糕,可能会指出一些实施问题.
小智 5
基本上每个人都是对的 - btree是默认索引,因为它表现得非常好.GiST是一些不同的野兽 - 它更像是一个"编写索引类型的框架",而不是一个索引类型.您必须添加自定义代码(在服务器中)才能使用它,但另一方面 - 它们非常灵活.
通常 - 除非您使用的数据类型告诉您这样做,否则不使用GiST.使用GiST的数据类型示例:ltree(来自contrib),tsvector(contrib/tsearch至8.2,自8.3以来的核心)以及其他数据类型.
PostgreSQL有着众所周知且非常快速的地理扩展 - PostGIS(http://postgis.refractions.net/),它将GiST用于其目的.