0

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

查询 mysql 以获取经过特定操作的实体,我执行以下操作:

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

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

无论如何,一开始我真的没有注意这个设置对性能的影响,而且我认为我遇到了一些麻烦,因为上面的查询运行得很慢。

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

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

TIA,吉尔特詹

4

2 回答 2

0

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

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

如果是这种情况,那么状态索引将很有用。不过,这可能是一个长镜头。否则,您最好的选择可能是修改您的架构。

于 2010-06-11T02:34:49.850 回答
0

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

于 2010-06-11T02:41:55.753 回答