gpt4 book ai didi

mysql - 索引搜索是否适用于带有按位运算的 where 子句?

转载 作者:行者123 更新时间:2023-11-29 13:36:17 32 4
gpt4 key购买 nike

我有一个包含 int 的表,其中存储了大约 30 个 bool 标志。让我们构建一个示例:

Table MyTable
idRow | idUser | idThing | flags | moreColumns

我有一个经常运行的查询来扫描该表:

SELECT idRow, idThing,  morColumns FROM MyTable WHERE idUser = ? AND flags = ?

因此,索引是使用(idUser,标志)构建的,但是由于逻辑更新,我知道必须使用更多标志组合来增加查询,或者允许按位操作来指示真正想要的标志:

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:我发现它是这样的,我也许可以尝试将标志分解为尽可能多的 bool 列,但是很难做到这一点,所以除非你能给我很强的理由这样做不要建议它作为一个选项..

最佳答案

按位运算时不使用索引。如果应用程序逻辑允许您计算组合,最好使用此查询

SELECT idRow, idThing,  morColumns FROM MyTable WHERE idUser = ? AND flags IN (combination1 ..combinationn);

此外,使用 bool 字段并对其建立索引也不是一个好主意,因为索引的选择性很差。但是,如果您必须将数据拆分为 bool 字段,您可以在 true 字段上使用部分索引。

关于mysql - 索引搜索是否适用于带有按位运算的 where 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18696009/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com