我有一个 mysql 8.0 存储过程,它在逻辑中使用 start_date 参数。
如果 start_date 为“set”(例如,set @start_date = '2023-0-01',则查询将在不到一秒的时间内执行。
但是,如果我声明一个局部变量(即声明 start_date 日期默认为“2023-01-01”,或者如果我对 start_date 进行硬编码,则查询将花费近 350 秒。
为什么性能会有如此巨大的差异?
下面是“设置”变量时的 EXPLAIN 输出:
“声明”局部变量时的输出如下。为什么行数差异如此之大?
select date('2023-0-01') is null; --> 1
也就是说,您的字符串被视为
NULL
。
空值常常以令人惊讶的方式发挥作用。
如果您需要优化查询的帮助,让我们看看。 (
EXPLAIN
还不够。)