很诧异是不是,和咱们写的 SQL 顺序发生了很大的变化,但却很符合查询的数据处理逻辑,先需要知道在什么地方获取数据,然后根据 on 条件进行数据关联,再通过 where 条件筛选掉不符合条件的数据,接着进行分组、筛选分组结果,然后根据要求在筛选出需要返回的数据项,最后根据取数限定,返回一定量的数据。
  在进一步分析,发现 SQL 中使用的全部都是 left join,结合我们前面说的内容,left join 会在右侧数据表不存在符合条件的数据时,检索左侧表的内容,而从业务角度分析,在这个查询中,左侧表 sb_sbxx 并不会出现在不存在于其他报表的数据,因此可以使用 inner join 替换掉现有的 left join
  然后,在分析查询条件,在查询条件中存在使用子查询结果的情况,同时存在 like 条件和 or 条件,根据优化策略,我们对查询条件的顺序进行调整,将可以大量过滤数据的条件前移,将 like 条件后置,同时将涉及子查询的条件先拆分出来放置到分组条件中,对 SQL 进行优化,得到以下优化结果