首页 新闻 会员 周边 捐助

oracle 高手帮我看看这个语句怎么改效率更好?

0
悬赏园豆:5 [待解决问题]

这个SQL为何执行很慢?要3分钟左右才出来结果,有什么提高查询速度的写法吗?

 

select sum( case when c.nd='2012' then p.amount_sum else 0 end )年实际收购量
,sum( case when c.nd='2012' then 1 else 0 end )年参与收购的站点数
,sum( case when c.nd='2012' then s.buy_line_amount else 0 end )年参与收购的线数
,sum( case when c.nd='2012' then s.buy_power else 0 end )年参与收购的线数的设计收购能力
 from tb_yy_contract c join tb_yy_planter_sale_nd p on c.con_no=p.con_no join tb_yy_station s on c.sg_code=s.station_code
hexllo的主页 hexllo | 菜鸟二级 | 园豆:318
提问于:2013-07-19 08:53
< >
分享
所有回答(6)
0

建议检查一下索引

dudu | 园豆:30948 (高人七级) | 2013-07-19 10:41
0
nd 字段分区没 
zander | 园豆:162 (初学一级) | 2013-07-19 11:51
0
select sum(   p.amount_sum )年实际收购量
,sum(  1  )年参与收购的站点数
,sum(   s.buy_line_amount    )年参与收购的线数
,sum( s.buy_power else )年参与收购的线数的设计收购能力
 from tb_yy_contract c join tb_yy_planter_sale_nd p on c.con_no=p.con_no join tb_yy_station s on c.sg_code=s.station_code
where c.nd='2012' 这样?
死白的man | 园豆:2135 (老鸟四级) | 2013-07-19 12:14

谢谢,但是查的不只是一年,我只是把其中的部分SQL放上来了,还有2013,2012,2011等等。。如果是这样写,就要union N年的数据了。。这样会不会更慢?

支持(0) 反对(0) hexllo | 园豆:318 (菜鸟二级) | 2013-07-19 17:17

@hexllo: 

最后 group by 一下c.nd
    
支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2013-07-28 20:27
0

可以试着用nd分组后查询

迷失的java | 园豆:154 (初学一级) | 2013-07-19 21:32
0

贴出原SQL,和执行计划看看

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2013-07-19 22:20
0

加上查询条件。把你的表结构贴一下,执行计划。这样大家才好帮你分析啊!你的表,既然按照年查询,按年分区吧。

bitbug | 园豆:470 (菜鸟二级) | 2013-12-18 09:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册