有人可以解释一下为什么在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);
在最后两行,作者在路径列上创建了两个索引。为什么?这还不够 Gist 的目的吗?
在 F.21.3 节中,作者暗示 b-tree 和 gist 可以加速以下运算符:
ltree 上的 B-tree 索引:<, <=, =, >=, >
ltree 上的 GiST 索引:<、<=、=、>=、>、@>、<@、@、~、?
这意味着 Gist 对所有上述操作员来说已经足够了。让我澄清一下我的问题。作者是试图在这里为这两个索引提供示例,还是有使用这两个索引的原因。
我正在创建一个带有 ltree 列的表,我想知道我应该在我的列上创建两个索引(btree 和 gist)还是 gist 就足够了?