Tengo las siguientes tablas:operaciones bit a bit en Postgres
types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F
y
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
me gustaría preguntar ahora:
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
¿Cuál es el mejor índice posible para las tablas types
y vendors
en postgres? Es posible que tenga millones de filas en los vendedores. Además, ¿cuáles son las ventajas de utilizar este método bit a bit en comparación con la relación Muchos a muchos usando una tercera tabla? ¿Cual es mejor?
Creo que te refieres a 'tipo & 7 = 0'; si utilizas 'tipo & 7> 0', devolverás cualquier elemento que coincida con 'A', 'B' o 'C', ya que coincidirá cualquier bit dar como resultado una respuesta mayor que 0. (Alex, Bob, David, Ed, Meta, Henry, Iris, Jack) Hacer 'tipo & 7 = 0' da como resultado solo aquellos elementos que coinciden con los tres bits. (Ed, Iris, Jack) –