cbo有时不会用索引

sql的cbo  执行计划 是无法控制的  条件查出的记录数与总记录的占比有关,
oracle有时会认为用索引比不用索引的成本还高,此时可能cbo的性能要比rbo差。我们只能加hint改变执行计划
可能加一个不是很重要的条件就会改变整个的计划   
-- Create table
create table T1
(
  ID   VARCHAR2(32) not null,
  NAME VARCHAR2(62),
  AGE  VARCHAR2(62)
);
alter table T1
  add constraint PK_T1 primary key (ID);
create index IDX_T1_NAME on T1 (NAME);

-- Create table
create table T2
(
  ID      VARCHAR2(32) not null,
  FID     VARCHAR2(32),
  NAME    VARCHAR2(55),
  ADDRESS VARCHAR2(32)
);
alter table T2
  add constraint PK_T2 primary key (ID);
create index IDX_T2_NAME on T2 (NAME);

alter table T2
  add constraint fk_t2_ref_t1 foreign key (FID)
  references T1 (ID);

是按name  1:1的两个表

插入数据
begin
for i in 1..10000 loop
insert into t1(id,name,age) values (sys_guid(),'tom'||sys_guid(),'44');
end loop;
end;

插入数据

insert into t2(id,fid,name,address) (select sys_guid() ,id ,name, sys_guid() from t1)


begin
for i in 1..10 loop
insert into t1(id,name,age) values (sys_guid(),'zhang','44');
end loop;
end;


select * from t1,t2 where t1.name=t2.name  and t1.name='zhang'

12548713_200804052112371.jpg

begin
for i in 1..400 loop
insert into t1(id,name,age) values (sys_guid(),'zhang','44');
end loop;
end;

select * from t1,t2 where t1.name=t2.name  and t1.name='zhang'

12548713_200804052112372.jpg


select /*+rule*/* from t1,t2 where t1.name=t2.name  and t1.name='zhang'

12548713_200804052112373.jpg

fj.pngcbo1.jpg

fj.pngcbo2.jpg

fj.pngcbo3.jpg

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12548713/viewspace-229973/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/12548713/viewspace-229973/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值