我记得在 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,但通过使用触发器来保持数据同步可以缓解这种情况(这通常是为了提高性能)。
关于mysql - MySQL中是否可以有基于函数的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10595037/