SQL优化——union与unionall、leftjoin和innerjoin及内连接  最近在优化⼀个功能,原写法是视图中套⽤视图,视图中⼜有视图,且查询了多张表⽤不同的数据源,⽤了union也⽤了union all,还有left join 和 inner join 及内连接的使⽤。
  现象:打开列表页⾯DB的使⽤率就⾼达30%
  优化点:
  1、在业务允许的情况下⽤union all 代替union
    union all 和 union 都是将两个结果集合并,但是效率有所不同:
     a.对重复结果的处理:union 会筛选去掉结果集中重复数据,⽽union all 允许有重复数据;
     b.对排序的处理:union会按照字段进⾏排序,⽽union all 只是汇集结果后返回。
    所以union all 的效率会⾼于union,在业务允许的情况使⽤union all。
  2、left join 和 inner join的优化
    a.left join是左外连接,左边主表的内容全部显⽰出来,关联表满⾜条件就才显⽰;sql中union多表合并
    b.inner join没有主附表的区分,两个表满⾜关联条件的都显⽰出来(inner join简写就是join);
   优化点:left join是左外连接⽤在主表数据较少,从表数据量较⼤的时候;如果业务逻辑要求主表数据量⽐较⼤可以考虑inner join ,因为inner join返回结果的时候会⾃动选取数据量⼩的为基础表(待验证)。
  3、全连接效率最⼤,占⽤资源最多,尽量优化

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。