Commit 40e45278 authored by 王雷's avatar 王雷 😹

改错别字

parent 44941b0e
...@@ -208,13 +208,13 @@ limit 15 ...@@ -208,13 +208,13 @@ limit 15
WHERE sbxx.STATE = 'Y' WHERE sbxx.STATE = 'Y'
GROUP BY sbxx.ID GROUP BY sbxx.ID
``` ```
  进一步分析发现,这个子查询竟然嵌套了一个子查询,更令人费解的是,这个查询竟然是对同一张表,通过对 SQL 分析,这个查询的目的应该是提取符合条件的记录总数,然后对外提供查询。   进一步分析发现,这个子查询竟然嵌套了一个子查询,更令人费解的是,这个查询竟然是对同一张表,通过对 SQL 分析,这个查询的目的应该是提取符合条件的记录总数,然后对外提供查询。
  当然,我们在没有分析业务的前提下,也不能贸然调整 SQL,所以需要进一步分析子查询数据的用途,从 SQL 中,我们可以看到子查询返回了 num、sb_id 和 bb_dm 三个字段,其中 sb_id 作为子查询与其他数据表的关联条件,num 在查询条件中出现了一次,而 bb_dm 从头至尾就没有被使用过,为了避免 SQL 是动态生成的,缺少使用条件,我们又进一步检查业务逻辑,发现仍然没有使用这个条件的位置,因此可以认为此节点无意义,可以忽略;   当然,我们在没有分析业务的前提下,也不能贸然调整 SQL,所以需要进一步分析子查询数据的用途,从 SQL 中,我们可以看到子查询返回了 num、sb_id 和 bb_dm 三个字段,其中 sb_id 作为子查询与其他数据表的关联条件,num 在查询条件中出现了一次,而 bb_dm 从头至尾就没有被使用过,为了避免 SQL 是动态生成的,缺少使用条件,我们又进一步检查业务逻辑,发现仍然没有使用这个条件的位置,因此可以认为此节点无意义,可以忽略;
  进一步分析,发现 SQL 中使用的全部都是 left join,结合我们前面说的内容,left join 会在右侧数据表不存在符合条件的数据时,检索左侧表的内容,而从业务角度分析,在这个查询中,左侧表 sb_sbxx 并不会出现在不存在于其他报表的数据,因此可以使用 inner join 替换掉现有的 left join   进一步分析,发现 SQL 中使用的全部都是 left join,结合我们前面说的内容,left join 会在右侧数据表不存在符合条件的数据时,检索左侧表的内容,而从业务角度分析,在这个查询中,左侧表 sb_sbxx 并不会出现在不存在于其他报表的数据,因此可以使用 inner join 替换掉现有的 left join
  然后,分析查询条件,在查询条件中存在使用子查询结果的情况,同时存在 like 条件和 or 条件,根据优化策略,我们对查询条件的顺序进行调整,将可以大量过滤数据的条件前移,将 like 条件后置,同时将涉及子查询的条件先拆分出来放置到分组条件中,对 SQL 进行优化,得到以下优化结果   然后,分析查询条件,在查询条件中存在使用子查询结果的情况,同时存在 like 条件和 or 条件,根据优化策略,我们对查询条件的顺序进行调整,将可以大量过滤数据的条件前移,将 like 条件后置,同时将涉及子查询的条件先拆分出来放置到分组条件中,对 SQL 进行优化,得到以下优化结果
```sql ```sql
select select
distinct distinct
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment