使用用户定义变量时的Mysql存储过程性能

问题描述 投票:0回答:1

我有一个 mysql 8.0 存储过程,它在逻辑中使用 start_date 参数。

如果 start_date 为“set”(例如,set @start_date = '2023-0-01',则查询将在不到一秒的时间内执行。

但是,如果我声明一个局部变量(即声明 start_date 日期默认为“2023-01-01”,或者如果我对 start_date 进行硬编码,则查询将花费近 350 秒。

为什么性能会有如此巨大的差异?

下面是“设置”变量时的 EXPLAIN 输出:

“声明”局部变量时的输出如下。为什么行数差异如此之大?

mysql performance stored-procedures user-defined-variables
1个回答
0
投票
select date('2023-0-01') is null; --> 1

也就是说,您的字符串被视为

NULL

空值常常以令人惊讶的方式发挥作用。

如果您需要优化查询的帮助,让我们看看。 (

EXPLAIN
还不够。)

© www.soinside.com 2019 - 2024. All rights reserved.