优化mysql查询以在Bitwise where子句上使用索引

Pen*_*m10 4 mysql sql optimization bit-manipulation

我有一个查询,看起来像:

select count(*) from m1
WHERE  (m1.`resource` & 1472 );
Run Code Online (Sandbox Code Playgroud)

虽然我有资源索引但它没有使用它.如何优化以用于按位运算.

Gar*_*han 10

我不相信MySQL可以使用索引进行按位运算.

在MySQL性能论坛中对此进行了一些讨论:http://forums.mysql.com/read.php?24,35318("可以通过逐位比较进行索引扫描吗?"),其中MySQL员工建议基于拥有解决方案的解决方案每个(事物,设置位)对一行并进行一系列连接的表.我猜这个有多好用将取决于你的特定应用.

根据http://dev.mysql.com/tech-resources/articles/mysql-set-datatype.html索引对于对SET值执行相同类型的操作没有任何用处(使用整数和按位运算实现) .我曾经想过,如果对按位运算有任何巧妙的索引优化,它就已经应用于SETs了.


Jai*_*Jai 5

如果MySQL认为必须对表的每一行执行计算,则不使用索引。

优化这些查询的唯一方法是从资源列中删除计算。您如何做到这一点取决于您要实现的目标。

例如-这不使用索引

其中indexedCol * 2 = 6;

但这确实-

其中indexedCol = 6/2;

不确定是否可以通过按位&操作来实现。