Mysql 执行顺序

Mysql 执行顺序,mysql,sql,performance,subquery,Mysql,Sql,Performance,Subquery,我正在运行下面描述的一个很长的查询。 它为自动化系统上的每个帐户获取下一个需要的操作 即 实际上,IFNULL的字符串大约为10,每个都是相当复杂的子查询 我想知道,如果满足第一个IFNULL表达式,MySQL是否会计算以下IFNULL表达式的值。也就是说,如果一个帐户应该发送一条消息,它就不应该费心计算应该检查收件箱的子查询 MySQL就是这样工作的吗 这和什么时候的案子有什么区别 例如 我只想降低此查询的CPU使用率。您所尝试的最好是使用 返回列表中的第一个非NULL值,如果没有,则返回NU

我正在运行下面描述的一个很长的查询。 它为自动化系统上的每个帐户获取下一个需要的操作

实际上,IFNULL的字符串大约为10,每个都是相当复杂的子查询

我想知道,如果满足第一个IFNULL表达式,MySQL是否会计算以下IFNULL表达式的值。也就是说,如果一个帐户应该发送一条消息,它就不应该费心计算应该检查收件箱的子查询

MySQL就是这样工作的吗

这和什么时候的案子有什么区别

例如


我只想降低此查询的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标准。