使用modulo时,索引是否可以提高性能?

时间:2015-02-07 19:49:58

标签: mysql sql indexing

想象一个MySQL表,其中一个字段id包含从1到10亿的10亿行。

当我像这样进行查询时

SELECT * FROM table WHERE id > 2000 AND id < 5000;

很明显,id上的索引会提高该查询的效果。

但是,这样的索引也有助于模数,如下面的查询

SELECT * FROM table WHERE (id % 4) = 0;

使用modulo时使用索引是否有帮助?

2 个答案:

答案 0 :(得分:4)

没有

索引中使用的列上的函数(几乎)总是排除索引的使用。即使这不是真的,优化器也可能决定不使用索引。仅提取四分之一的记录可能不足以使索引值得。

答案 1 :(得分:2)

在Oracle DB中,您可以定义所谓的基于函数的索引,以便在索引中定义模数函数。但我很确定MySQL不存在基于函数的索引。

可以执行的操作作为一种解决方法添加额外的列,您可以在其中存储模数函数的结果。您必须修改插入脚本,以便将来插入并更新现有数据集。然后,您可以向该列添加索引并在where子句中使用它。