请有人解释为什么在Postgresql文档给出的示例中定义了两个索引机制( btree和gist) (请检查F.21.4。示例部分)。
以下是示例代码:
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就足够了?
发布于 2022-08-02 13:10:47
B树索引更快;请查看以下讨论:B树和GiST索引方法(在PostgreSQL中)有什么区别?
因此,创建这两个索引背后的逻辑是,GiST更灵活,并且可以在B树不支持搜索方法时使用( GiST有额外的@>, <@, @, ~, ? )。但是,当您使用两种方法(<, <=, =, >=, >)之间的通用方法时,B树将被使用,因为它更快。
https://stackoverflow.com/questions/63363408
复制相似问题