Mysql 执行顺序
我正在运行下面描述的一个很长的查询。 它为自动化系统上的每个帐户获取下一个需要的操作 即 实际上,IFNULL的字符串大约为10,每个都是相当复杂的子查询 我想知道,如果满足第一个IFNULL表达式,MySQL是否会计算以下IFNULL表达式的值。也就是说,如果一个帐户应该发送一条消息,它就不应该费心计算应该检查收件箱的子查询 MySQL就是这样工作的吗 这和什么时候的案子有什么区别 例如Mysql 执行顺序,mysql,sql,performance,subquery,Mysql,Sql,Performance,Subquery,我正在运行下面描述的一个很长的查询。 它为自动化系统上的每个帐户获取下一个需要的操作 即 实际上,IFNULL的字符串大约为10,每个都是相当复杂的子查询 我想知道,如果满足第一个IFNULL表达式,MySQL是否会计算以下IFNULL表达式的值。也就是说,如果一个帐户应该发送一条消息,它就不应该费心计算应该检查收件箱的子查询 MySQL就是这样工作的吗 这和什么时候的案子有什么区别 例如 我只想降低此查询的CPU使用率。您所尝试的最好是使用 返回列表中的第一个非NULL值,如果没有,则返回NU
我只想降低此查询的CPU使用率。您所尝试的最好是使用 返回列表中的第一个非NULL值,如果没有,则返回NULL 非空值 因此,这将是:
SELECT
Account.id,
COALESCE(
**Should send message query**,
**Should check inbox**
) as nextTask
FROM Account
现在谈谈你的实际问题
我想知道MySQL是否会计算以下[IFNULL]的值
表达式,如果第一个表达式满足
发动机没有理由这样做。您可以使用以下脚本对其进行测试:
set @executed1 = 'no';
set @executed2 = 'no';
select coalesce(
@executed1 := 'yes', -- evaluates to non null
@executed2 := 'yes'
);
select @executed1, @executed2;
结果:
@executed1 | @executed2
yes | no
@executed1 | @executed2
yes | yes
如您所见,第二个表达式未执行,因为第一个表达式的计算结果为非NULL值
set @executed1 = 'no';
set @executed2 = 'no';
select coalesce(
nullif(@executed1 := 'yes', 'yes'), -- evaluates to null
@executed2 := 'yes'
);
select @executed1, @executed2;
结果:
@executed1 | @executed2
yes | no
@executed1 | @executed2
yes | yes
这里两个表达式都已执行,因为第一个表达式的计算结果为NULL
我想说,
IFNULL
也是如此。但我不会用它。至少在你的情况下不是这样。首先:使用。@PaulSpiegel,为什么?这个案子有什么区别?“有什么区别”?-它比较短。而且它符合SQL标准。