tôi có các bảng sau:hoạt động Bitwise trong Postgres
types | id | name
------+----+----------
1 | A
2 | B
4 | C
8 | D
16| E
32| F
và
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
Tôi muốn truy vấn bây giờ:
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
chỉ số tốt nhất có thể cho các bảng là gì types
và vendors
trong postgres? Tôi có thể có hàng triệu hàng trong các nhà cung cấp. Hơn nữa, sự cân bằng của việc sử dụng phương pháp bitwise này so với quan hệ Nhiều Để Nhiều bằng cách sử dụng một bảng thứ 3 là gì? Cái nào tốt hơn?
Tôi nghĩ bạn có nghĩa là 'type & 7 = 0', nếu bạn sử dụng 'type & 7> 0' bạn sẽ trả về bất kỳ mục nào khớp với 'A', 'B' hoặc 'C', vì khớp với bất kỳ bit nào kết quả trong một câu trả lời lớn hơn 0. (Alex, Bob, David, Ed, Mục tiêu, Henry, Iris, Jack) Làm 'loại & 7 = 0' kết quả chỉ trong những mục phù hợp với tất cả ba bit. (Ed, Iris, Jack) –