找人帮忙优化SQL语句

来源:百度知道 编辑:UC知道 时间:2024/06/15 12:38:49
select se_regions.region_name,sum(jap_target.sales_target) target,jap_target.wcm_grp,
count(distinct se_wcm_mstr.wcm_addr) distNum,count(distinct se_pb.pb_code) oemNum from se_regions,se_wcm_mstr
left join se_pb on se_pb.dist_code = se_wcm_mstr.wcm_addr and se_pb.bu_id = 'IS'
left join jap_target on jap_target.wcm_year='2009' and jap_target.bu_id='IS'
where se_wcm_mstr.wcm_province_code = se_regions.province_code and se_regions.bu_id='IS'
group by se_regions.region_name,jap_target.wcm_grp

此sql执行太慢,差不多要一分钟,有没有办法优化一下,请高人指点

代码最好写的简洁,明了,清晰,
优化:在常用字段上建立索引;表的排序,按少到多,尽量少用distinct
你这里的表jap_target缺乏关联,会出问题。

select a.region_name,d.wcm_grp, sum(d.sales_target) target,
count(distinct b.wcm_addr) distNum,
count(distinct c.pb_code) oemNum
from se_regions a
left join se_wcm_mstr b on b.wcm_province_code = a.province_code
left join se_pb c on c.dist_code = b.wcm_addr
left join jap_target d on d.wcm_year='2009' and d.bu_id='IS'
where a.bu_id='IS' and c.bu_id = 'IS'
group by a.region_name,d.wcm_grp

理论上是先取小记录集再做连接
你这个 se_regions和jap_target的 jap_target.bu_id='IS' 的小记录集先做的连接再取的se_regions.bu_id='IS'的小记录集
把where 后的 se_regions.bu_id='IS' 条件放到 left join jap_target on 后
试下
其他的没仔细分析 按照 先取小记录集再做连接 自己优化吧