0

我有一个 ltree 列,其中包含一棵深度为 3 的树。我正在尝试编写一个查询,该查询可以选择特定深度的所有子级(级别 1 = 获取所有父级,2 = 获取所有子级,3 = 获取所有孙子级)。我知道这很简单n_level

SELECT path FROM hierarchies
WHERE
    nlevel(path) = 1
LIMIT 1000;

我有 200,000 条虚拟记录,而且速度非常快(约 170 毫秒)。但是,此查询使用顺序扫描。我认为最好以利用 GiST 索引支持的 ltree 运算符的方式编写它。令人沮丧的是,我似乎无法将我的大脑包裹在他们身上,而且我还没有在 SO 或 DBA 上找到类似的问题(除了这个关于寻找叶子的问题)

任何建议表示赞赏!

4

1 回答 1

1

唯一可以支持您的查询的索引是表达式上的简单 b 树索引。

create index on hierarchies((nlevel(path)))

但是请注意,无论如何,规划器很有可能选择顺序扫描,例如在级别 1 的行数比其他级别多得多的情况下。

于 2022-01-19T21:21:08.923 回答