mysql - MySQL中是否可以有基于函数的索引?

我记得在 Oracle 中可以基于函数进行索引,例如SUBSTRING(id,1,8).

MySQL 支持这个吗?如果没有,有没有其他选择?

最佳答案

不,不是一般意义上的,我什至不相信 5.6(首次编写此答案时的最新版本)具有此功能。值得注意的是8.0.13及以上版本现在支持functional indexes ,让您无需下文所述的触发方法即可实现您所需要的。

如果您运行的是旧版本的 mysql 可能只使用列的 leading 部分(此功能有已经存在了很长时间),但不是从第二个或后续字符开始,或者任何其他更复杂的函数。

例如,以下使用名称的前五个字符创建索引:

create index name_first_five on cust_table (name(5));

对于更复杂的表达式,您可以通过在其中包含可索引数据的另一个列来实现类似的效果,然后使用插入/更新触发器来确保它被正确填充。

除了为冗余数据浪费空间之外,这几乎是一回事。

而且,虽然它在技术上违反了 3NF,但通过使用触发器来保持数据同步可以缓解这种情况(这通常是为了提高性能)。

https://stackoverflow.com/questions/10595037/

相关文章:

mysql - 错误 : select command denied to user '

python - MySQL:从查询中获取列名或别名

mysql - 如何解决 "Error: MySQL shutdown unexpectedly"?

mysql - SQL 性能 UNION 与 OR

sql - 单数还是复数数据库表名?

mysql - MySQL 是否索引 NULL 值?

mysql - 如何在 Sequel Pro 中执行查询?

mysql - 遇到需要满足多个条件的 MySQL Join 问题

MySQL - 条件外键约束

mysql - 总锁数超过锁表大小