Побитовые операции в 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 

Каков наилучший возможный индекс для таблиц типов и ] производителей в postgres? У меня могут быть миллионы строк у поставщиков. Более того, каковы компромиссы использования этого побитового метода по сравнению с отношением «многие ко многим» с использованием третьей таблицы? Что лучше?

6
задан Erwin Brandstetter 10 February 2012 в 19:42
поделиться