当只对列进行位操作时,mysql索引对列'state'有用吗?

时间:2010-06-10 19:04:23

标签: mysql bit-manipulation bitwise-operators

我有很多域实体(存储在mysql中),它们经历了许多不同的操作。每个操作都是从不同的程序执行的。我需要为这些实体保留(流)状态,这些实体是作为一个用作位集的长字段“flowstate”实现的。

向mysql查询已经过某种操作的实体我做了类似的事情:

select * from entities where state >> 7 & 1 = 1

指示位7(与操作7相对应)已运行。 (< - 简化)

无论如何,我真的没有注意到这个设置在开始时的性能影响,我认为我有点麻烦,因为上面的查询运行得很慢。

我想知道的是什么: 'flowstate'上的mysql索引是否有帮助?毕竟它不是单个值,Mysql可以使用二进制排序或其他任何东西快速找到。

如果没有,我还能做些什么来加快速度吗? 。对于具有上述用例的字段,是否有特殊的“掩码索引”?

TIA, 吉尔特-JAN

2 个答案:

答案 0 :(得分:0)

在这种情况下,我认为MySQL没有办法使用索引。如果您知道位总是从左到右,从右到左或以某种特定顺序设置,您可以在限制需要检查的行数的情况下做一些技巧:

... where state < ? and state > ? and ...

如果是这种情况,则状态索引将是有用的。不过,这可能是一个长镜头。否则,最好的办法就是修改你的架构。

答案 1 :(得分:0)

在语句中使用EXPLAIN来查看它是如何访问该表的。值得在该字段上放置索引并重新运行EXPLAIN以查看MySQL是否使用它。如果表格相当大,结果之间应该有明显的性能差异。