我有许多域实体(存储在mysql中),它们经历了许多不同的操作。每个操作都是从不同的程序执行的。我需要为这些实体保留(流)状态,我在中将其实现为一个长字段‘-state’,并将其用作位集。
为了在mysql中查询已经执行了特定操作的实体,我执行了如下操作:
select * from entities where state >> 7 & 1 = 1指示位7(响应于操作7)已运行。(<--简化)
无论如何,一开始我真的没有注意到这种设置对性能的影响,我认为我遇到了一些麻烦,因为上面的查询运行得相当慢。
我想知道的是:'flowstate‘上的mysql索引真的有帮助吗?毕竟,这不是Mysql可以使用二进制排序或其他方法快速找到的单个值。
如果没有,我还能做些什么来加快速度呢?对于具有上述用例的字段,是否有特殊的“掩码索引”?
TIA,Geert-jan
发布于 2010-06-11 10:34:50
我认为在这种情况下,MySQL没有任何方法可以使用索引。如果您知道bits总是从左到右,或者从右到左,或者以某种特定的顺序设置,那么您可以使用一些技巧来限制需要检查的行数:
... where state < ? and state > ? and ...如果是这样的话,那么state上的索引将是有用的。然而,这可能是一个很长的机会。否则,您最好的选择可能是修改您的模式。
发布于 2010-06-11 10:41:56
在语句上使用EXPLAIN来查看它是如何访问表的。有必要在字段上建立一个索引,然后重新运行EXPLAIN来查看MySQL是否使用了它。如果表相当大,则结果之间应该存在明显的性能差异。
https://stackoverflow.com/questions/3017584
复制相似问题