postgresql - 数组和 tstzrange 的索引
问题描述
我正在尝试找到索引需要、和索引的表的btree
最佳gin
方法gist
。表架构如下所示:
CREATE TABLE relationships (
tenant_id UUID NOT NULL,
relationship_id UUID NOT NULL,
node_id UUID NOT NULL,
effective_range tstzrange NOT NULL,
parent_id UUID,
-- adjacency list of node_ids
ancestors UUID[] NOT NULL DEFAULT ARRAY[]::UUID[],
PRIMARY KEY (tenant_id, relationship_id, node_id, effective_range),
EXCLUDE USING gist (
tenant_id WITH =,
relationship_id WITH =,
node_id WITH =,
effective_range WITH &&
),
CONSTRAINT effective_range_enforce_bounds
CHECK (lower_inc(effective_range) AND NOT upper_inc(effective_range))
);
我们使用这个表来查询我们节点的父母、孩子、祖先和死者。每行都有一个effective_range
列,表示该行当前何时“生效”。这样我们就可以查询某个时间戳的世界状态。一个普通的查询如下所示:
-- Get descendent node_ids of a node (var: $3)
SELECT node_id
FROM relationships
WHERE tenant_id = $1::uuid
AND relationship_id = $2::uuid
AND ancestors @> ARRAY[$3]::uuid[]
AND effective_range @> $4::timestamptz
但我找不到要添加的正确索引以保持此查询快速。似乎我需要数组的索引,但是gin
索引是否有一种混合方式并在单个索引中?有点像扩展和?ancestors
gist
effective_range
gin
gist
btree_gist
btree_gin
谢谢!
解决方案
推荐阅读
- java - inputText 如何从 bean 中设置属性?
- machine-learning - Keras Switch operation
- ruby - 数组说明中的块/过程返回数组
- android-studio - 无法解析符号“GoogleApiClient”
- c# - C# Selenium - Explicitly waiting By.CssSelector(...)
- javascript - Load clicked URLs from AJAX loaded page
- android - 屏幕关闭时出现 DialogFragment IllegalStateException
- regex - Got error 'invalid UTF-8 string at offset 1' from regexp
- r - 在 R 中将绘图导出为 pdf:将图例添加到第二页但不是第一页
- git - .gitattributes 未显示正确的语言(语言学家可检测)