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小时内删除。
发表评论