首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在Postgresql文档中的LTree示例中,作者在ltree列上创建了两个索引?

为什么在Postgresql文档中的LTree示例中,作者在ltree列上创建了两个索引?
EN

Stack Overflow用户
提问于 2020-08-11 17:28:58
回答 1查看 190关注 0票数 1

请有人解释为什么在Postgresql文档给出的示例中定义了两个索引机制( btree和gist) (请检查F.21.4。示例部分)。

以下是示例代码:

代码语言:javascript
复制
CREATE TABLE test (path ltree);

INSERT INTO test VALUES ('Top');
INSERT INTO test VALUES ('Top.Science');
INSERT INTO test VALUES ('Top.Science.Astronomy');
INSERT INTO test VALUES ('Top.Science.Astronomy.Astrophysics');
INSERT INTO test VALUES ('Top.Science.Astronomy.Cosmology');
INSERT INTO test VALUES ('Top.Hobbies');
INSERT INTO test VALUES ('Top.Hobbies.Amateurs_Astronomy');
INSERT INTO test VALUES ('Top.Collections');
INSERT INTO test VALUES ('Top.Collections.Pictures');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Stars');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Galaxies');
INSERT INTO test VALUES ('Top.Collections.Pictures.Astronomy.Astronauts');

CREATE INDEX path_gist_idx ON test USING gist(path);
CREATE INDEX path_idx ON test USING btree(path);

在最后两行中,作者在path列上创建了两个索引。为什么?这难道还不够吗?

在F.21.3节中,作者暗示b树和gist可能会加速以下操作程序:

对ltree的B树索引:<,<=,=,>=,>ltree上的GiST索引:<,<=,=,>=,>,@>,<@,@,~,?

这意味着Gist对以上所有的operators.let都足够了,我的问题就清楚了。作者试图在这里提供两个索引的示例,或者使用这两个索引是有原因的。

我正在创建一个带有ltree列的表,我想知道我应该在列上创建两个索引(btree和gist)还是gist就足够了?

EN

回答 1

Stack Overflow用户

发布于 2022-08-02 13:10:47

B树索引更快;请查看以下讨论:B树和GiST索引方法(在PostgreSQL中)有什么区别?

因此,创建这两个索引背后的逻辑是,GiST更灵活,并且可以在B树不支持搜索方法时使用( GiST有额外的@>, <@, @, ~, ? )。但是,当您使用两种方法(<, <=, =, >=, >)之间的通用方法时,B树将被使用,因为它更快。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63363408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档