sql:Oracle:驱动表是什么?

1.什么是驱动表?

  1. 通俗的讲就是先从哪个表开始检索啦,找到好的驱动表语句的优化就成功一半了
  2. eg: select * from a,b where a.id = b.id and a.姓名 = '美格瑞恩' and b.性别 = '女';在a,b表同等数量级的情况下显然用a表做为驱动表比较好因为姓名相对于性别来说可以过滤掉更多的数据,所以想办法使你的执行计划扫描a表先再通过nest loop与b表关连比较理想
    2.RBO和CBO
    RBO中一般情况下是from后最后一张是驱动表,CBO中输出数据量最少的是驱动表!驱动表是基表,其他表是基于驱动表来嵌套。主要是调优时用的,考虑性能优化。
    RBO - 1、 基于规则的优化方式(Rule-Based Optimization,简称为RBO) 优化器 
    CBO - 1、 基于代价的优化方式(Cost-Based Optimization,简称为CBO) 优化器
    如果你是学DBA可能需要深入一些,如果你是技术开发,没有必要了解这么多。数据库是哪种优化器不是开发人员所能决定的。

2.oracle如何选择驱动表

  1. RBO或者CBO没有分析table的情况下,对于2个表的操作,FROM子句中,RBO选择最右的表作为驱动表(一般也就是from 中最后的表作为驱动表 )。 所以 对于NESTED LOOPS、HASH JOIN、SORT MERGE JOIN方式,驱动表选择较小的表 (放在from 最右端),速度会更快; 存在主、外键关系的表,由于主键由oracle自动建立索引,外键上最好也建索引,以避免全表扫描 。 而对于3个或以上table连接查询,对于FROM子句,RBO以从右到左的顺序处理表连接,也就是from 子句最右端table作为驱动表。我们常说,驱动表一定是小表,指的是根据条件获得的子集合一定要小,而不是说实体表本身一定要小,大表如果获得的子集合小,一样可以简称这个大表为驱动表。 ,最好选择与其他表的主键字段进行比较,或者与已经索引的字段进行比较,这样一来,就有意识地将业务需求的主表,作为驱动表处理了,Oracle也会在选择最优执行计划时,比较容易的找到驱动表。如果WHERE条件过于复杂,或者业务上获得信息的主表并不容易确定,我们可以根据业务的实际情况,评估关联各表的数据量和数据增长量,并分析关键条件字段的区分度,考虑在区分度高的字段,或者区分度高的组合字段上创建索引,以最大限度的降低某个表的结果集,增加其作为驱动表的机会。

原文参考:https://blog.csdn.net/john2522/article/details/7966158

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值