decode

 

 

为测试效率的情况,我今天特意做了个实验
测试环境为以下[均无使用索引,机器为闲置的测试机]
SQL>; desc hzh_aa
Name                            Null?    Type
------------------------------- -------- ----
ID                                       NUMBER
TYPE                                     NUMBER(38 )

SQL>; desc hzh_bb
Name                            Null?    Type
------------------------------- -------- ----
ID                                       NUMBER
LB                                       VARCHAR2(2)

SQL>; desc hzh_cc
Name                            Null?    Type
------------------------------- -------- ----
ID                                       NUMBER
LB                                       VARCHAR2(2)

SQL>; 

运行以下代码往表中插内容:

declare 
i number;
begin
for i in 1..100000 loop
insert into hzh_aa values(i,1);
insert into hzh_aa values(i,2);
end loop;
commit;
end;
/

declare 
i number;
begin
for i in 1..100000 loop
insert into hzh_bb values(i,'OK');
insert into hzh_cc values(i,'NO');
end loop;
commit;
end;
/

set timing on         --打开timing


select count(*) from (
        select aa.id, decode(aa.type, 1, bb.lb, cc.lb) 
        from hzh_aa aa, hzh_bb bb, hzh_cc cc
        where aa.id= bb.id (+) 
        and aa.id = cc.id (+));
         
连续三次执行的时间分别为:[7691] [7681] [7671]


select count(*) from (
        select hzh_aa.id,lb 
        from hzh_aa,hzh_bb
        where hzh_aa.id=hzh_bb.id and hzh_aa.type=1
        union
        select hzh_aa.id,lb
        from hzh_aa,hzh_cc
        where hzh_aa.id=hzh_cc.id and hzh_aa.type=2);

连续三次执行的时间分别为:[9193] [9133] [9153]

这是aa表只有20万条记录时的差距,在实际应用中的数据量是远远大于这个的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值