帮忙优化一个mysql的语句,很多重复子查询

2025-02-23 20:12:40
推荐回答(3个)
回答1:

子查询优化策略

对于不同类型的子查询,优化器会选择不同的策略。

1. 对于 IN、=ANY 子查询,优化器有如下策略选择:

  • semijoin

  • Materialization

  • exists

  • 2. 对于 NOT IN、<>ALL 子查询,优化器有如下策略选择:

  • Materialization

  • exists

  • 3. 对于 derived 派生表,优化器有如下策略选择:

  • derived_merge,将派生表合并到外部查询中(5.7 引入 );

  • 将派生表物化为内部临时表,再用于外部查询。

  • 注意:update 和 delete 语句中子查询不能使用 semijoin、materialization 优化策略

回答2:

看代码看的晕,给你个建议吧,就不仔细看你的东西了
一个是做临时表,分别几个不同的条件放到几个临时表,然后最后一个语句进行总结处理

另外一个就是,拆分,比如说一个表table
你可以
select * from table a,table b
where a.recdate=b.recdate

回答3:

select sum(value1) as sum1,sum(value2) as sum2,recdate
from table1
where recdate = (select max(recdate) as max from table1)
group by recdate