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

WHERE条件使用静态参数函数时SQL查询性能问题咨询

关于MySQL yearweek函数静态调用的性能问题解答

函数计算次数结论

入参全为静态常量、不依赖行数据的yearweek()只会在查询执行前计算1次,不会逐行重复计算。
MySQL查询优化器会自动识别确定性函数的静态调用场景:只要函数输出仅由入参决定,且入参都是固定值,优化器会在执行计划生成阶段就完成函数计算,将结果作为常量代入过滤逻辑,和直接写死数值的执行效率完全一致。
你可以通过EXPLAIN语句分别执行两个版本的查询验证,二者生成的执行计划、过滤常量完全相同,没有性能差异。

是否需要提前计算为常量

  • 常规场景不需要:直接写yearweek(日期)的可读性远高于写死的数值,后续维护时不需要额外推算数值对应的日期范围,也不会有性能损失。
  • 特殊场景建议提前计算:
    • 需要兼容不支持yearweek函数的异构数据库
    • 要避免不同实例的周规则配置差异(比如周起始日设置不同)导致yearweek输出结果不一致
    • 需要做极细粒度的执行计划强制管控

原始查询示例

select e_name 
from my_table 
where year_week between yearweek('2021-11-10') and yearweek('2021-11-18');

提前计算常量后的查询示例

select e_name 
from my_table 
where year_week between 202145 and 202146;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:06:03