首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当只对列执行位操作时,mysql索引对列'state‘有用吗?

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

Stack Overflow用户
提问于 2010-06-11 03:04:23
回答 2查看 371关注 0票数 0

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

为了在mysql中查询已经执行了特定操作的实体,我执行了如下操作:

代码语言:javascript
复制
select * from entities where state >> 7 & 1 = 1

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

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

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

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

TIA,Geert-jan

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-11 10:34:50

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

代码语言:javascript
复制
... where state < ? and state > ? and ...

如果是这样的话,那么state上的索引将是有用的。然而,这可能是一个很长的机会。否则,您最好的选择可能是修改您的模式。

票数 0
EN

Stack Overflow用户

发布于 2010-06-11 10:41:56

在语句上使用EXPLAIN来查看它是如何访问表的。有必要在字段上建立一个索引,然后重新运行EXPLAIN来查看MySQL是否使用了它。如果表相当大,则结果之间应该存在明显的性能差异。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3017584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档