You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法基于自定义函数创建MySQL 8.0函数索引的问题排查

问题根源

MySQL 8.0的函数索引仅支持内置确定性函数,自定义函数即便标注了DETERMINISTIC,也不在函数索引允许的范围内。这是官方对函数索引表达式的硬性限制——仅内置函数可用于构建函数索引,MySQL不会验证自定义函数的实际确定性,也不会认可其DETERMINISTIC标识作为合法依据。

替代解决方案(排除临时列、视图、表)

直接将自定义函数的逻辑转换为内置表达式,创建基于该表达式的函数索引:

CREATE INDEX idx_salary_range ON salaries (
    CASE
        WHEN salary < 40000 THEN 1
        WHEN salary < 80000 THEN 2
        WHEN salary < 120000 THEN 3
        ELSE 4
    END
);

该索引完全实现了原自定义函数salary_range2的逻辑,且符合MySQL函数索引的规则。后续查询时,只需使用相同的CASE表达式,优化器会自动命中该索引。

示例查询:

SELECT * FROM salaries 
WHERE CASE
        WHEN salary < 40000 THEN 1
        WHEN salary < 80000 THEN 2
        WHEN salary < 120000 THEN 3
        ELSE 4
    END = 2;

内容的提问来源于stack exchange,提问作者luca84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 02:14:57