gpt4 book ai didi

performance - Postgres 中的位运算

转载 作者:行者123 更新时间:2023-11-29 11:24:03 26 4
gpt4 key购买 nike

我有以下表格:

types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F

vendors | id | name     | type
--------+----+----------+-----
1 | Alex | 2 //type B only
2 | Bob | 5 //A,C
3 | Cheryl | 32 //F
4 | David | 43 //F,D,A,B
5 | Ed | 15 //A,B,C,D
6 | Felix | 8 //D
7 | Gopal | 4 //C
8 | Herry | 9 //A,D
9 | Iris | 7 //A,B,C
10| Jack | 23 //A,B,C,E

我现在要查询:

select id, name from vendors where type & 16 >0 //should return Jack as he is type E
select id, name from vendors where type & 7 >0 //should return Ed, Iris, Jack
select id, name from vendors where type & 8 >0 //should return David, Ed, Felix, Herry

postgres 中表 typesvendors 的最佳索引是什么?我可能有数百万行供应商。此外,与使用第三张表的多对多关系相比,使用这种按位方法的权衡是什么?哪个更好?

最佳答案

Use 可以使用部分索引来解决“&”不是可索引运算符这一事实(afaik):

CREATE INDEX vendors_typeA ON vendors(id) WHERE (type & 2) > 0;
CREATE INDEX vendors_typeB ON vendors(id) WHERE (type & 4) > 0;

当然,每次添加新类型时都需要添加新索引。这是将数据扩展到关联表中的原因之一,然后可以正确地对其进行索引。你总是可以写触发器来额外维护一个位掩码表,但是使用多对多表来实际维护数据正常,因为它会更清晰。

如果您对扩展和性能的整个评估是说“我可能有数百万行”,那么您还没有做足够的事情来开始进行这种优化。首先创建一个结构合理的清晰模型,然后根据有关其性能的真实统计数据对其进行优化。

关于performance - Postgres 中的位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com