当前位置: 首页 > news >正文

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

相关文章:

  • MapReduce:原理之Word Count 以及Java实现
  • Hive:数据倾斜调优/解决方案总结
  • Spark:对数据倾斜的八种处理方法
  • Spark:spark集群中什么是cpu-core 内核?RDD分区个数?集群的节点个数?及三者与并行度的关系
  • Spark:通过sample算子找出导致数据倾斜的key
  • MapReduce:用通俗易懂的大白话讲解MapReduce原理
  • Spark:任务中如何确定spark分区数、task数目、core个数、worker节点个数、excutor数量
  • JVM :内存初学 (堆(heap)、栈(stack)和方法区(method) ) perfect
  • BI测试
  • BI、数据仓库、ETL、大数据开发工程师
  • Java:IO:FileInputStream与FileReader的区别
  • Java :IO:基础示例
  • Java:IO: 详解
  • Java:IO:深入理解
  • Flume:数据导入到hdfs中
  • [笔记] php常见简单功能及函数
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • canvas绘制圆角头像
  • CentOS6 编译安装 redis-3.2.3
  • input实现文字超出省略号功能
  • Java到底能干嘛?
  • js ES6 求数组的交集,并集,还有差集
  • JS数组方法汇总
  • Laravel Telescope:优雅的应用调试工具
  • MaxCompute访问TableStore(OTS) 数据
  • passportjs 源码分析
  • React16时代,该用什么姿势写 React ?
  • 搞机器学习要哪些技能
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 通信类
  • 微信小程序开发问题汇总
  • 微信小程序--------语音识别(前端自己也能玩)
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 鱼骨图 - 如何绘制?
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #QT(串口助手-界面)
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (windows2012共享文件夹和防火墙设置
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)JPA - JQPL 实现增删改查
  • (转载)OpenStack Hacker养成指南
  • (轉貼) UML中文FAQ (OO) (UML)
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • .FileZilla的使用和主动模式被动模式介绍
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .naturalWidth 和naturalHeight属性,
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken