Je les tableaux suivants:opérations au niveau du bit dans Postgres
types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F
et
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
Je voudrais interroger maintenant:
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
Quel est le meilleur indice possible pour les tables types
et vendors
dans postgres? Je peux avoir des millions de lignes dans les fournisseurs. En outre, quels sont les compromis de l'utilisation de cette méthode bit à bit par rapport à la relation Many To Many en utilisant une 3ème table? Ce qui est mieux?
Je pense que vous voulez dire 'type & 7 = 0', si vous utilisez 'type & 7> 0', vous retournerez tout élément qui correspond à 'A', 'B' ou 'C' résultat dans une réponse supérieure à 0. (Alex, Bob, David, Ed, But, Henry, Iris, Jack) Faire 'type & 7 = 0' donne seulement les items qui correspondent aux trois bits. (Ed, Iris, Jack) –