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

标签 mysql indexing

我记得在 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/

相关文章:

php - 具有多个命名参数的 PDO bindParam()

python - 使用 numpy 查找每列的最大值及其索引(+ 当最大值在同一列中重复时)

mysql - 如何优化这个 MySQL 查询/结构?

SQL Server 对多个表列建立索引

mysql - MyISAM 上的 FullText INDEXING 真的很慢

java - 准备语句: getIngredientByName

mysql - 覆盖数据库中的唯一行 - 这种方法是错误的吗?

mysql - 使用 LOAD DATA INFILE 忽略时间戳中的特定逗号?

php - 使用sql过滤最新评论

php mysql 对结果集进行过滤