oracle优化器

优化器:

Oracle的优化器有两种,基于规则的(RBO)和基于成本的(CBO).oracle10g开始RBO被废除,

但我们仍然可以使用HINT使用它。

基于规则(RBO)的优化器

如果表上有索引,并且where条件中正好有该列,那么基于规则的优化器就会走索引,

也不会考虑消耗问题。

如果几个表关联,就根据表在sql语句中的位置,决定那个表为驱动表,那个表为被驱动表。

 

 

我们创建了一张表,并在id列建了一个索引,数据在id列的分布很倾斜。

在基于规则的优化器里,当where条件中的条件为id列时,优化器会毫不犹豫的选择索引。

执行计划如下:

 

 

当查询条件为id=300时,选择索引很合理,但当条件为id=1时,全表扫描更合理,因为如果选择索引,oracle会先扫描索引块,在根据索引中记录的rowid扫描数据块,最终查询到数据,这样的话要扫描更多的数据块,消耗更多的I/O,所以此时全表扫描更合理。

基于成本(CBO)的优化器:

还使用上面的表test做实验。

 

 

我们看到当数据量大时,oracle选择全表扫描

当数据量小时,oracle选择索引

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值