Ho le seguenti tabelle:operazioni bit per bit in Postgres
types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F
e
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
Vorrei interrogare ora:
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
Qual è il miglior indice possibile per le tabelle types
e vendors
in postgres? Potrei avere milioni di righe nei venditori. Inoltre, quali sono i compromessi nell'usare questo metodo bit a bit rispetto alla relazione Many To Many usando una terza tabella? Che è migliore?
Penso che tu intenda 'digita & 7 = 0', se usi 'tipo & 7> 0' restituirai qualsiasi elemento che corrisponda a 'A', 'B' o 'C', poiché la corrispondenza con qualsiasi bit risultato in una risposta maggiore di 0. (Alex, Bob, David, Ed, Obiettivo, Henry, Iris, Jack) Se si esegue "type & 7 = 0", si ottengono solo quegli elementi che corrispondono a tutti e tre i bit. (Ed, Iris, Jack) –