首页/数据/数据库速查/函数索引(Functional Index,8.0.13+)
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条
性能与调优57 条
Redis 命令96 条Redis 运维与场景124 条

函数索引(Functional Index,8.0.13+)

按表达式建索引:对列做函数/表达式查询可走索引(如 MONTH(col)、JSON 字段提取),语法是加括号的表达式。

数据库速查数据更新于 2026-10-12

创建与使用

创建与使用
ALTER TABLE appdb.orders ADD INDEX idx_month ((MONTH(created_at)));
EXPLAIN SELECT * FROM appdb.orders WHERE MONTH(created_at) = 10;
-- 注意:查询表达式需与索引表达式完全一致
ALTER TABLE appdb.events ADD INDEX idx_js ((CAST(data->>'$.type' AS CHAR(16))));
原理隐藏虚拟列 + 索引
匹配表达式必须与查询完全相同
JSON8.0.13+ 支持 JSON 路径表达式索引
函数索引削弱了索引可读性:能用改写查询(范围化)解决时优先改写。

易错点

  • 写 MONTH(created_at) = 10 但索引建的是 created_at:老问题原样复现(函数包列)
  • 表达式不完全一致(多空格/类型转换差异):优化器识别不到,索引白建

数据来源与参考

  • MySQL 8.0 Reference Manual: Functional Indexes

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌