我可以使用位信息创建一个整数字段并使用索引吗?

时间:2017-03-25 01:41:52

标签: sql postgresql bitwise-operators

我正试图解决一个难题 more info 。所以我有这些作品创作的作品和解决方案。

 Pieces: piece_id
 Solution: solution_id

如果我有三件将有8个解决方案 2 ^ 3 。我的想法是使用solution_id来表明哪些部分是其中的一部分。

 solution_id   pieces 
      0          000  -- no pieces (not really a solution)
      1          001  -- only the piece_id = 1
      2          010  -- only the piece_id = 2
      3          011  -- have piece 1 and 2
      4          100
      5          101
      6          110
      7          111  -- all pieces (not really a solution because need solve two parts) 

我需要两个解决方案,但solution2无法在solution1上找到任何内容

问题是:

  • 我可以在整数之间进行按位运算,以了解两个解决方案是否共享任何部分或需要位数组吗?
  • 我可以使用一个索引来改善此连接的性能吗?
  • 有更好的方法吗?

    SELECT s1.solution_id, s2.solution_id
    FROM solutions
    WHERE s1.solution_id & s2.solution_id = 0
    

1 个答案:

答案 0 :(得分:0)

您似乎知道问题的答案:

  1. 是的,您可以使用按位操作。
  2. 您可能无法使用索引来优化此查询。
  3. 但是,您可以以不同方式存储数据。更好的数据结构是:

    solution_id    piece
       1             1
       2             2
       3             1
       3             2
    . . .
    

    然后你可以使用连接和更传统的数据库操作。