SQL 优化 - 嵌套查询优化

开发人员在最开始编写 SQL 的时候,往往会对 SQL 结构以及效率进行调优。但是随着业务的变化,SQL 也会存在调整。那么就会在原有 SQL 中增加新的逻辑,就像打补丁一样。



就会出现类似于下面这样的 SQL

select aa.*,

case when case aa.a1>0 then ‘0’

else ‘1’ end a1_desc

from

(select a.a1,a.a2,a.a3,a.a4,b.b1,b.b2…

from

a left join b on a.xxx=b.xxx) aa
在这段 SQL 中,就是在原有逻辑中增加了一个对 aa 结果集的 a1 列的条件判断。

这样简单的变化不会对sql产生太大的效率变化。但是试想,如果在 case when 中对 aa 结果集的 a1 列的判断是非常复杂的,例如需要做格式转换、求余、复杂计算以及很多的判断种类等。那么就会大大影响这个 SQL 的执行效率。

这个时候,SQL 的优化就应该从优化外层嵌套的逻辑进行下手。

首先,判断外层 SQL 是否真的需要,如果可以省略,那么应该直接去除,并加到子逻辑中;

其次,归纳外层 SQL 中时候存在重复出现的对每个或某几个字段的复杂运算。如存在,应该提炼重复信息,并放在子逻辑中,这样可以减少计算次数,提高解析效率。

最后,如果上述方式不起作用,那么应该通过优化数据库解析来提高效率。

Geeker Xu wechat
欢迎您扫一扫上面的微信公众号,订阅我的公众号
坚持原创技术分享,您的支持将鼓励我继续创作!