使用模数时索引是否会提高性能?

ect*_*ksp 3 mysql sql indexing

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

当我执行这样的查询时

SELECT * FROM table WHERE id > 2000 AND id < 5000;
Run Code Online (Sandbox Code Playgroud)

显然,索引id将提高该查询的性能。

但是,这样的索引是否也有助于模数运算,如以下查询所示

SELECT * FROM table WHERE (id % 4) = 0;
Run Code Online (Sandbox Code Playgroud)

使用模数时使用索引有帮助吗?

Gor*_*off 5

不。

索引中使用的列上的函数(几乎)总是阻止索引的使用。即使这不是真的,优化器也可能决定不使用索引。仅获取四分之一的记录可能不够选择性,因此索引不值得。