IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> ORACLE 里的优化器-基于规则的优化器-驱动表的选择1 -> 正文阅读

[大数据]ORACLE 里的优化器-基于规则的优化器-驱动表的选择1

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

目录

文章目录

前言

一、RBO中的驱动表

二、测试步骤

1.数据准备

2.更换表的顺序看影响

总结



前言

基于规则的优化器(RBO)通过硬编码在Oracle数据库代码中的一系列固定的规则,来 决定目标SQL的执行计划。具体来说就是这样:Oracle会在代码里事先给各种类型的执行路径定一个等级, 一共有15个等级,从等级1到等级15。并且Oracle会认为等级值低的执行路径的执行效率会比等级值高的执 行效率要高,也就是说在RBO的眼里,等级1所对应的执行路径的执行效率最高,等级15所对应的执行路径 的执行效率最低。在决定目标SQL的执行计划时,如果可能的执行路径不止一条,则RBO就会从该SQL诸 多可能的执行路径中选择一条等级值最低的执行路径来作为其执行计划。

一、RBO中的驱动表

如果目标SQL出现了有两条或者两条以上的执行路径的等级值相同的情况,可以通 过改变目标SQL中所涉及的各个对象在该SQL文本中出现的先后顺序来调整该目标SQL的执行计划。这通 常适用于目标SQL中出现了多表连接的情形,在目标SQL出现了有两条或者两条以上的执行路径的等级值相 同的前提条件下,RBO会按照从右到左的顺序来决定谁是驱动表,谁是被驱动表,进而会据此来选择执行计 划,所以如果我们改变了目标SQL中所涉及的各个对象在该SQL文本中出现的先后顺序,也就改变了表连接 的驱动表和被驱动表,进而就调整了该SQL的执行计划。

二、测试步骤

1.数据准备

代码如下(示例):

sqlplus scott/tiger 
create table emp_temp as select * from emp
create table emp_temp1 as select * from emp
 select t1.mgr,t2.deptno
?  ? from emp_temp t1,emp_temp1 t2
?  ?where t1.empno=t2.empno
?  ?/

Execution Plan
----------------------------------------------------------
Plan hash value: 846513867

--------------------------------------------------------------------------------
| Id ?| Operation ? ? ? ? ?| Name ? ? ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? |
--------------------------------------------------------------------------------
| ? 0 | SELECT STATEMENT ? | ? ? ? ? ? | ? ?14 | ? 210 | ? ? 6 ? (0)| 00:00:01 |
|* ?1 | ?HASH JOIN ? ? ? ? | ? ? ? ? ? | ? ?14 | ? 210 | ? ? 6 ? (0)| 00:00:01 |
| ? 2 | ? TABLE ACCESS FULL| EMP_TEMP ?| ? ?14 | ? 112 | ? ? 3 ? (0)| 00:00:01 |
| ? 3 | ? TABLE ACCESS FULL| EMP_TEMP1 | ? ?14 | ? ?98 | ? ? 3 ? (0)| 00:00:01 |
--------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

? ?1 - access("T1"."EMPNO"="T2"."EMPNO")

2.更换表的顺序看影响

将上面的SQL文本中的表顺序进行更换,验证

1 ?select t1.mgr, t2.deptno
? 2 ?from emp_temp1 t2,emp_temp t1
? 3* where t1.empno=t2.empno
SCOTT@erpdb> /

Execution Plan
----------------------------------------------------------
Plan hash value: 189864779

--------------------------------------------------------------------------------
| Id ?| Operation ? ? ? ? ?| Name ? ? ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? |
--------------------------------------------------------------------------------
| ? 0 | SELECT STATEMENT ? | ? ? ? ? ? | ? ?14 | ? 210 | ? ? 6 ? (0)| 00:00:01 |
|* ?1 | ?HASH JOIN ? ? ? ? | ? ? ? ? ? | ? ?14 | ? 210 | ? ? 6 ? (0)| 00:00:01 |
| ? 2 | ? TABLE ACCESS FULL| EMP_TEMP1 | ? ?14 | ? ?98 | ? ? 3 ? (0)| 00:00:01 |
| ? 3 | ? TABLE ACCESS FULL| EMP_TEMP ?| ? ?14 | ? 112 | ? ? 3 ? (0)| 00:00:01 |
--------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

? ?1 - access("T1"."EMPNO"="T2"."EMPNO")

发现sql文本中表的顺序更换后,在rbo中的驱动表也成了最右侧的表。


总结

当目 标SQL有两条或者两条以上的执行路径的等级值相同时,我们确实可以通过改变目标SQL中所涉及的各个对 象在该SQL文本中出现的先后顺序来影响RBO对于其执行计划的选择。

注意,这种位置的先后顺序对于目标SQL执行计划的影响是有前提条件的,那就是仅凭各条执行路径等 级值的大小RBO难以选择执行计划,也就是说该目标SQL 一定有两条或者两条以上执行路径的等级值相同。 换句话说,如果RBO仅凭各条执行路径等级值的大小就可以选择目标SQL的执行计划,那么无论怎么调整 相关对象在该SQLSQL文本中的位置,对于该SQL最终的执行计划都不会有任何影响。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:14:33  更:2022-03-17 22:17:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:43:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码