有关多表Left join的优化

编程入门 行业动态 更新时间:2024-10-26 22:30:31
有关多表Left join的优化 SELECT COUNT(DISTINCT T1.A1) + COUNT(DISTINCT T2.B1) + COUNT(DISTINCT T3.C1) FROM T1 LEFT JOIN T2 on T1.A1 = T2.A1 LEFT JOIN T3 on T1.A1 = T3.A1 LEFT JOIN T4 on T3.C1 = T4.C1 GROUP BY T1.A2, T1.A3 上面这个SQL效率太差了, T1,T2,T3,T4表达到5千条的时候,需要两,三分钟 希望大家帮忙优化一下 多谢大家帮帮忙吧!

最满意答案

1、因为T1表式主表,所以 【select COUNT(DISTINCT T1.A1) from T1】和你求出的 【COUNT(DISTINCT T1.A1)】值是一样的。 2、而由于T2等是从表并且你使用了【COUNT(DISTINCT T2.B1)】因此null值会被排除掉,实际上和下面的语句求出的值是一样的 select COUNT(DISTINCT T2.B1) from T1 inner join T2 on T1.A1 = T2.A1; 3、从上面的分析可以看出你使用【left join】的目的只有一个就是得到【T1】表全部数据的【COUNT(DISTINCT T1.A1)】,所以试试改成下面的sql是否性能能够快些 select cnt1+cnt2+cnt3 from( (select COUNT(DISTINCT T1.A1) cnt1 from T1 GROUP BY T1.A2, T1.A3)t1, (select COUNT(DISTINCT T2.B1) cnt2 from T1 inner join T2 on T1.A1 = T2.A1 GROUP BY T1.A2, T1.A3)t2, (select COUNT(DISTINCT T3.C1) cnt3 from T1 inner join T3 on T1.A1 = T3.A1 inner join T4 on T3.C1 = T4.C1 GROUP BY T1.A2, T1.A3)t3; --- 以上,希望对你有所帮助。

更多推荐

本文发布于:2023-08-04 06:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1412620.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Left   join

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!