让我们有一个表:
用户名 | 条款 |
---|---|
usr1 | [v1,v2] |
usr1 | [v3] |
usr1 | [v1] |
usr2 | [v1] |
usr2 | [v2] |
并假设我们在其上创建一个多列 GIN 索引。
CREATE INDEX my_gin_ix ON items USING gin (usr,terms);
键的 B 树会是什么样子?
从文档(和postgres repo)我看到每个 B-Tree 节点都应该有一个列标识符和一个从字段中提取的键(每个字段可以产生多个键),但我找不到任何例子来阐明是否同一行的各个列最终成为彼此的“子树”,或者它们是否被索引为独立值。
换句话说,如果我运行查询,usr = 'usr1' AND terms @> array['v1']
数据库将:
A。找到usr1
然后在其子树中找到一个节点,v1
该节点将产生一个发布列表或
b. 查找usr1
和关联的发布列表,然后分别搜索v1
并获取关联的发布列表,然后计算两个发布列表的交集?