У меня есть следующие таблицы:Битовые операции в Postgres
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
Каков наилучший показатель для таблиц types
и vendors
в postgres? У меня могут быть миллионы строк в поставщиках. Более того, каковы компромиссы с использованием этого побитового метода по сравнению с отношением Many To Many с использованием третьей таблицы? Что лучше?
Я думаю, вы имеете в виду «type & 7 = 0», если вы используете «type & 7> 0», вы вернете любой элемент, который соответствует «A», «B» или «C», поскольку совпадение любого бита будет в результате получается ответ больше 0. (Алекс, Боб, Дэвид, Эд, Цель, Генри, Ирис, Джек) Создание «type & 7 = 0» приводит только к тем элементам, которые соответствуют всем трем битам. (Эд, Ирис, Джек) –