我有一个带有 int 的表,它存储了大约 30 个布尔标志。让我们构建一个示例:
Table MyTable
idRow | idUser | idThing | flags | moreColumns
我有一个经常扫描该表的查询:
SELECT idRow, idThing, morColumns FROM MyTable WHERE idUser = ? AND flags = ?
因此,索引是使用 (idUser, flags) 构建的,但是由于逻辑上的更新,我知道必须使用更多标志组合来增加查询,或者允许进行位运算来指示真正需要的标志:
SELECT idRow, idThing, morColumns FROM MyTable WHERE idUser = ? AND (flags = combination1 OR flags = combination2 OR flags = combination3) -- may have to keep increasing in the future
或我更喜欢的其他选项:
SELECT idRow, idThing, morColumns FROM MyTable WHERE (PRIVILEGE_FLAGS & flag) = flag;
但我不确定创建的索引是否有助于查询,或者最好使用其他选项。
谢谢你。
PS:我发现它是这样的,我可以尝试将标志分成尽可能多的布尔列,但很难做到这一点,所以除非你能给我非常充分的理由,否则请不要建议它作为一个选项..