驱动表普遍认为是由SQL语句的写法决定的,简单的说,就是FROM语句后面的表列表中的最后一个。由于SQL语句是从后向前进行分析,Oracle会根据FROM语句从后到前将各个表依次连接起来。

SQL> CREATE TABLE T1 AS SELECT * FROM USER_TABLES;

表已创建。

SQL> CREATE TABLE T2 AS SELECT * FROM USER_INDEXES;

表已创建。

SQL> SET AUTOT ON EXP SQL> SELECT COUNT(*) FROM T1, T2 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 MERGE JOIN 3 2 SORT (JOIN) 4 3 TABLE ACCESS (FULL) OF 'T2' 5 2 SORT (JOIN) 6 5 TABLE ACCESS (FULL) OF 'T1'

SQL> SELECT COUNT(*) FROM T2, T1 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 MERGE JOIN 3 2 SORT (JOIN) 4 3 TABLE ACCESS (FULL) OF 'T1' 5 2 SORT (JOIN) 6 5 TABLE ACCESS (FULL) OF 'T2'

根据这个例子,可以看出,SQL语句的写法对于驱动表的影响。

然而,实际上驱动表和连接顺序的选择要比上面的观点复杂的多,下面对稍微调整一下这个例子。

SQL> ALTER TABLE T1 ADD CONSTRAINT PK_T1 PRIMARY KEY (TABLE_NAME);

表已更改。

SQL> SELECT COUNT(*) FROM T1, T2 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS 3 2 TABLE ACCESS (FULL) OF 'T2' 4 2 INDEX (UNIQUE SCAN) OF 'PK_T1' (UNIQUE)

SQL> SELECT COUNT(*) FROM T2, T1 2 WHERE T1.TABLE_NAME = T2.TABLE_NAME;

COUNT(*) ---------- 37

Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT ptimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 NESTED LOOPS 3 2 TABLE ACCESS (FULL) OF 'T2' 4 2 INDEX (UNIQUE SCAN) OF 'PK_T1' (UNIQUE)

仅仅是给T1增加了一个主键,就发现不管SQL语句怎么写驱动表都是T2。

即使是RBO,确定表连接顺序的规则也是比较复杂的:

1.优化器产生一系列连接顺序,每次均把不同的表作为驱动表。而且,优化器根据下面的算法产生每个连接顺序。

为了确定连接顺序中各个表的位置,优化器根据RBO执行计划的排名,在剩余的表中找到表访问路径排名最高的表,然后不断的重复这个过程,依次确定连接顺序中每个表的前后顺序。

对于连接顺序中的每张表,优化器根据执行计划的排名选择一种连接方式将当前表和前面的表或数据源连接在一起。

2.优化器在执行计划的结果集中进行选择。优化器的目标是最大程度的选择内部表采用索引扫描方式的NESTED LOOPS连接操作。

通常情况下,优化器在选择执行计划时,不会考虑表在FROM语句中出现的顺序。优化器依次根据下面的规则来作出选择

优化器选择执行计划使得内部表为全表扫描的NESTED LOOPS连接尽可能的少;

如果采用上面的条件出现了平局的情况,则优化器选择尽可能少出现SORT MERGE操作的执行计划;

如果仍然出现平局的情况,则优化器将选择表访问路径中排名最高的表作为驱动表;

如果这时仍然是平局,则优化器会把FROM语句中最后出现的表最为驱动表。

oracle 驱动表提示错误代码,oracle驱动表以及如何确定驱动表相关推荐

  1. oracle 安装的提示ntp,oracle rac 安装 PRVG-13606 ntp 同步报错解决过程

    oracle ntp 检查报错 ./runcluvfy.sh stage -pre crsinst -n oracle57,oracle58 -verbose [10:06:58]Verifying ...

  2. oracle10 64位odbc,图文教你64位win10添加oracle odbc驱动时提示无法加载oracle如何解决...

    现在电脑已成为我们工作生活的一部分,相信大家在操作电脑时一定会遇到这样那样的问题,64位win10添加oracle odbc驱动时提示无法加载oracle如何解决这个问题就是我们经常会遇到的,这样的问 ...

  3. oracle提示表名无效,ORACLE提示表名无效

    在创建ORACLE数据库时,创建表 提示表名无效 请查看数据库表名是否出现了小写字母或者关键字,如USER- [问题描述]在使用 SQL Server 2008 r2 时,有时在完成SQL书写后,会提 ...

  4. oracle存储过程和视图不存在,Oracle 创建存储过程 提示权限不足或者提示表和视图不存在问题...

    grant create view to hospital; --授予查询权限 grant select any table to hospital; --授予权限 grant select any ...

  5. oracle 内部表连接方式,ORACLE 表连接方式

    一表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联,从一个或多个表检索出相关的数据.连接是通过SQL语句中FROM从句的多个表名,以及WHERE从句里定义的表之间的连接条件来实现的.如果一 ...

  6. oracle 非等值关联 优化,Oracle优化器、优化模式、表的连接方式(Hash Join、Nested Loop、Sort Merge Join)...

    查询优化器 Oracle的查询优化器(QO)分为两种: 1. RBO:Ruled-Based Optimization, 基于规则的优化器: 2. CBO :Cost-Based Optimizati ...

  7. oracle 内部表连接方式,oracle表连接方式

    ORACLE表连接方式及常见用法(二) /2010-12-22 13:30:13 /个人分类: 一 引言 数据仓库是目前已知的比较成熟和被广泛采用的解决方案,用于整合电信运营内部所有分散的原始业务数据 ...

  8. oracle抽取mysql_oracle到mysql,oracle到oraclel的多表批量数据迁移,定期任务抽取数据-kettle的使用...

    一.背景 上一篇文章(单表数据迁移)用kettle实现了一张表的数据迁移.但实际情况中,数据库会有几百,几千张表,而kettle的表输入和表输出只能选择一张表,我们不可能一个个地填写表名.这时候,我们 ...

  9. oracle外部表kup-04040,【故障处理】19c PDB中创建外部表时,出现KUP-04040报错

    [故障描述] 使用网络连接的方式登录19c的PDB,然后创建oracle_loader驱动模式的外部表.创建成功后,在检索数据时,出现KUP-04040的报错,过程如下: [oracle@sdedu ...

最新文章

  1. 【迁移2018-04-12 10:46:11】BeanCopier之MapStruct(一)
  2. 巧用httpModules实现网站域名更换
  3. html代码type,HTML中type是什么意思
  4. astrm30米分辨率高程数据下载_如何下载道路沿线1000米范围内的高程?
  5. alsa driver--card
  6. 路由器与交换机怎么插线_网络设备:中继器、集线器、网桥、交换机、路由器、网关的超全总结!...
  7. 5000并发的qps是多少_高并发和高性能系统中进程、线程、协程、队列(如何调度的)...
  8. PCB----LayOut的一些准则
  9. redenvelope php,Red Envelope (红包)
  10. 【十大思想实验之中的一个】电车难题
  11. 小米5 MIUI 10系统完全Root教程 (Root思想通用所有机型)
  12. 前端上班第一天-开发环境配置
  13. ROS新手教程(talker/listener)
  14. 上下文感知分析:对最重要的漏洞进行优先级排序
  15. c++(003)梯形面积的计算
  16. 去掉Excel单元格最右边的几个字母
  17. 当百度大脑AI虚拟主持人成央视五四晚会焦点,接班中国的不只有青年,还有AI
  18. Python正则去除中英文标点的操作手法
  19. 常用计算机工具软件论文,计算机常用软件论文 陈杰.doc
  20. 人生的十种意境!!!

热门文章

  1. 算法--Hash算法及其应用场所
  2. k8s挂载目录_拥抱云原生,如何将开源项目用k8s部署?
  3. python类中变量作用域_Python中的变量作用域
  4. python中的集合set
  5. MySql:函数总结
  6. 把数据集刷穿是什么体验?MetaQA已100%准确率
  7. AC算法在美团上单系统的应用
  8. 论文浅尝 - EMNLP2020 | 低资源跨语言实体链接中的设计挑战
  9. 刘志明 | 知识图谱及金融相关
  10. 【LeetCode】3月25日打卡-Day10