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了.
如果MySQL认为必须对表的每一行执行计算,则不使用索引。
优化这些查询的唯一方法是从资源列中删除计算。您如何做到这一点取决于您要实现的目标。
例如-这不使用索引
其中indexedCol * 2 = 6;
但这确实-
其中indexedCol = 6/2;
不确定是否可以通过按位&操作来实现。