当前位置: 首页 > 面试题库 >

使用按位函数对BIT字段进行查询时,MySQL不使用索引

温嘉玉
2023-03-14
问题内容

我的MySQL表中有一个BIT类型的字段。我想使用位值存储记录的状态,例如:

1 = status1
2 = status2
4 = status3
8 = status4

每个记录可以一次具有许多状态。对于status1和status3,该值将为1 + 4 =5。我可以使用以下命令查询具有status3的所有记录的表:

SELECT * 
  FROM `table` 
 WHERE `statuses` & 4

我在上有索引statuses,但EXPLAIN告诉我未使用任何索引。在这种情况下可以使用索引吗?

PS使用单独的多对多链接表是更规范的解决方案,但我想为此提供更多的“扁平”结构。


问题答案:

对于优化器来说,要在位域上使用索引将很困难。考虑设置了位2(值“
4”)的所有不同值:4、5、6、7、12、13、14、15、15、20、21、22、23,…优化器将如何提高效率使用那个?



 类似资料:
  • 我有这样一个问题: 其中我将存储到数据库中的DateTime与通过java方法传递的localDate进行比较。我收到这个异常: 有一种方法可以配置hibernate/jpa自动进行转换,或者我必须传递一个日期对象,而不是LocalDate?我甚至尝试导入hibernate-java8,但没有改变

  • 问题内容: 我有下面的代码(我包括了我认为所有相关的部分): 运行此命令时,在添加第一个参数时会收到IndexOutOfBoundsException。我做错了什么? 问题答案: 尝试以下方法:

  • 所以除了上面的5个字段之外,core0中的rest all字段将为null。 下一个是核心1 核心1我们使用单独的查询索引3个字段 谢谢,拉维

  • 我在mysql表中有一个int列,用于存储与状态相关的位。我对基于状态字段中是否设置了一个或多个位的查询感兴趣。 我尝试了以下方法:

  • 问题内容: 我正在使用Jesey在Java(JAX-RS)中实现Restful Web Service。我在Tomcat v7.0上运行它,我使用Hibernate将数据映射到数据库(MySQL)。我有一个查询来获取可交付成果的列表: 它给了我一百个可交付成果,但我想在Task表中拥有前三名。感谢您的帮助。如何修改查询? 请注意,这三个可交付成果不应重复。 与@FGreg答案存在冲突。当我使用这些

  • 问题内容: 例如,我正在查询一个我知道会是唯一且已编入索引(例如主键)的字段。因此,我知道此查询将仅返回1行(即使没有LIMIT 1) 或仅更新1行 如果对字段建立索引,是否会增加查询执行时间? 问题答案: 在主键/唯一字段上查询时,使用MySQL“ LIMIT 1”有什么意义吗? 在针对主键或唯一约束的筛选条件进行查询时,最好不要使用这种做法。主键或唯一约束意味着表中只有一行/记录具有该值,因此