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

问题描述 投票:0回答:2

想象一个

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

当我执行这样的查询时

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

很明显,

id
上的索引将提高该查询的性能。

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

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

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

mysql sql indexing
2个回答
5
投票

没有。

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


2
投票

例如,在 Oracle DB 中,您可以根据您的目的定义所谓的“基于函数的索引”,在索引中定义模函数。但我很确定 MySQL 不存在基于函数的索引。

可以做的

解决方法是添加一个附加列,用于存储模函数的结果。您必须修改插入脚本来填充它以供将来插入并更新现有数据集。然后您可以向该列添加索引并在 where 子句中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.