使用按位函数在BIT字段上查询时,MySQL不使用索引

时间:2010-08-24 19:56:22

标签: sql mysql bitwise-operators

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

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

每条记录可以同时拥有多种状态。对于status1和status3,该值将为1 + 4 = 5.我可以使用以下命令查询表中包含status3的所有记录:

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

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

P.S。使用单独的多对多链接表是更规范化的解决方案,但我希望有更多“扁平”结构。

1 个答案:

答案 0 :(得分:4)

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