Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化mysql查询以在按位where子句上使用索引_Mysql_Sql_Optimization_Bit Manipulation - Fatal编程技术网

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

优化mysql查询以在按位where子句上使用索引,mysql,sql,optimization,bit-manipulation,Mysql,Sql,Optimization,Bit Manipulation,我有一个查询,如下所示: select count(*) from m1 WHERE (m1.`resource` & 1472 ); 虽然我在资源上有索引,但它并没有使用它。如何对其进行优化以用于按位操作。我不相信MySQL可以将索引用于按位操作 MySQL性能论坛对此进行了一些讨论:(“是否可以通过按位比较进行索引扫描?”),其中一位MySQL员工建议了一种解决方案,该解决方案基于一个表,每个(thing,set bit)对一行,并执行一系列连接。我想这项工作的好坏很大程度上取决

我有一个查询,如下所示:

select count(*) from m1
WHERE  (m1.`resource` & 1472 );

虽然我在资源上有索引,但它并没有使用它。如何对其进行优化以用于按位操作。

我不相信MySQL可以将索引用于按位操作

MySQL性能论坛对此进行了一些讨论:(“是否可以通过按位比较进行索引扫描?”),其中一位MySQL员工建议了一种解决方案,该解决方案基于一个表,每个(thing,set bit)对一行,并执行一系列连接。我想这项工作的好坏很大程度上取决于您的特定应用程序


根据索引,对
SET
值(使用整数和位运算实现)执行相同类型的操作没有任何用处。我原以为,如果有任何聪明的索引优化用于按位操作,它应该已经应用于
SET
s。

如果MySQL认为必须对表中的每一行执行计算,它就不会使用索引

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

例如 这不使用索引

其中indexedCol*2=6

但这是真的-

其中indexedCol=6/2


但不确定是否可以在按位操作中实现这一点。

在Sql server上,它确实在按位操作中使用索引。我试图在MySql上重现性能,但无法。。。。
MySQL是一个很棒的想法,但是如果他们不考虑按位操作的基本性能,这确实是一个很大的失望!p> 嗨。也许这个链接可以帮助你。我确实知道那篇文章,我正试图实现类似的方法,但我没有数字可比。