`
小嘴冰凉
  • 浏览: 456918 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

闲谈Oracle执行计划的步骤顺序

 
阅读更多
经过长时间学习Oracle,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。Oracle执行计划的每一步返回一组行,它们或者为下一步所使用,或者在最后一步时返回给发出SQL语句的用户或应用。由每一步返回的一组行叫做行源(row source)。下面得树状图显示了从一步到另一步行数据的流动情况。每步的编号反映了在你观察Oracle执行计划时所示步骤的顺序(如何观察Oracle执行计划将被简短地说明)。一般来说这并不是每一步被执行的先后顺序。



Oracle执行计划的每一步或者从数据库中检索行,或者接收来自一个或多个行源的行数据作为输入:

由红色字框指出的步骤从数据库中的数据文件中物理检索数据。这种步骤被称之为存取路径,后面会详细介绍在Oracle可以使用的存取路径:
◆第3步和第6步分别的从EMP表和SALGRADE表读所有的行。
◆第5步在PK_DEPTNO索引中查找由步骤3返回的每个DEPTNO值。它找出与DEPT表中相关联的那些行的ROWID。
◆第4步从DEPT表中检索出ROWID为第5步返回的那些行。

由黑色字框指出的步骤在行源上操作,如做2表之间的关联,排序,或过滤等操作,后面也会给出详细的介绍:
◆第2步实现嵌套的循环操作(相当于C语句中的嵌套循环),接收从第3步和第4步来的行源,把来自第3步源的每一行与它第4步中相应的行连接在一起,返回结果行到第1步。
◆第1步完成一个过滤器操作。它接收来自第2步和第6步的行源,消除掉第2步中来的,在第6步有相应行的那些行,并将来自第2步的剩下的行返回给发出语句的用户或应用。

实现Oracle执行计划步骤的顺序

Oracle执行计划中的步骤不是按照它们编号的顺序来实现的:Oracle首先实现树结构图形里作为叶子出现的那些步骤(例如步骤3、5、6)。由每一步返回的行称为它下一步骤的行源。然后Oracle实现父步骤。

举例来说,为了执行图5-1中的语句,Oracle以下列顺序实现这些步骤:
首先,Oracle实现步骤3,并一行一行地将结果行返回给第2步。
对第3步返回的每一行,Oracle实现这些步骤:
◆Oracle实现步骤5,并将结果ROWID返回给第4步。
◆Oracle实现步骤4,并将结果行返回给第2步。
◆Oracle实现步骤2,将接受来自第3步的一行和来自第4步的一行,并返回给第1步一行。
◆Oracle实现步骤6,如果有结果行的话,将它返回给第1步。
◆Oracle实现步骤1,如果从步骤6返回行,Oracle将来自第2步的行返回给发出SQL语句的用户。

注意Oracle对由第3步返回的每一行实现步骤5,4,2,6一次。许多父步骤在它们能执行之前只需要来自它们子步骤的单一行。对这样的父步骤来说,只要从子步骤已返回单一行时立即实现父步骤(可能还有Oracle执行计划的其余部分)。如果该父步骤的父步骤同样可以通过单一行返回激活的话,那么它也同样被执行。所以,执行可以在树上串联上去,可能包含Oracle执行计划的余下部分。对于这样的操作,可以使用first_rows作为优化目标以便于实现快速响应用户的请求。

对每个由子步骤依次检索出来的每一行,Oracle就实现父步骤及所有串联在一起的步骤一次。对由子步骤返回的每一行所触发的父步骤包括表存取,索引存取,嵌套的循环连接和过滤器。

有些父步骤在它们被实现之前需要来自子步骤的所有行。对这样的父步骤,直到所有行从子步骤返回之前Oracle不能实现该父步骤。这样的父步骤包括排序,排序一合并的连接,组功能和总计。对于这样的操作,不能使用first_rows作为优化目标,而可以用all_rows作为优化目标,使该中类型的操作耗费的资源最少。

有时语句执行时,并不是象上面说的那样一步一步有先有后的进行,而是可能并行运行,如在实际环境中,3、5、4步可能并行运行,以便取得更好的效率。从上面的树型图上,是很难看出各个操作执行的先后顺序,而通过Oracle生成的另一种形式的Oracle执行计划,则可以很容易的看出哪个操作先执行,哪个后执行,这样的Oracle执行计划是我们真正需要的,后面会给出详细说明。现在先来看一些预备知识。
http://www.qqread.com/oracle/2009/11/z480975.html
分享到:
评论

相关推荐

    面试中的闲谈技巧,好的闲谈是敲门砖

    面试中的闲谈技巧,好的闲谈是敲门砖

    高手讲解系列!闲谈嵌入式编程的复杂性

    闲谈嵌入式编程的复杂性 嵌入式编程是一种复杂的编程技术,需要开发人员具备深入的编程知识和实践经验。文章通过两个实践例子,说明了嵌入式编程中的多个问题,并分析了解决这些问题的方法。 嵌入式编程的复杂性...

    JS调用XML的结合的闲谈

    "JS调用XML的结合的闲谈"这个主题涵盖了JavaScript与XML的集成,以及它们在实际项目中的应用。这篇总结将深入探讨如何通过JavaScript操作XML文档,提取、修改和展示数据。 首先,XML(eXtensible Markup Language)...

    Java设计模式入门闲谈

    而`clone()`方法则负责执行实际的克隆操作。值得注意的是,默认的`clone()`方法仅能实现浅克隆,即对于对象中的引用类型成员变量只复制其引用地址,而非深克隆,后者会复制整个对象树。因此,在实现深克隆时,可能还...

    SEM优化:品牌词管理闲谈(下).doc

    SEM优化:品牌词管理闲谈(下).doc

    考研月计划和周计划表格.doc

    6. **时间安排与外在干扰**:考生需要识别并记录浪费时间的外在因素,如社交闲谈、无计划的浏览网页等,然后制定对策以减少这些干扰。这有助于提高学习效率,避免不必要的分心。 7. **遗留任务与情绪管理**:对于...

    Python闲谈(二)聊聊最小二乘法以及leastsq函数.docx

    Python闲谈(二)聊聊最小二乘法以及leastsq函数.docx

    Python闲谈(二)聊聊最小二乘法以及leastsq函数.pdf

    Python闲谈(二)聊聊最小二乘法以及leastsq函数.pdf

    Python1闲谈(二)聊聊最小二乘法以及leastsq函数.pdf

    。。Python1闲谈(二)聊聊最小二乘法以及leastsq函数.pdf

    闲谈嵌入式编程的复杂性

    ### 闲谈嵌入式编程的复杂性 #### 嵌入式编程的入门与挑战 嵌入式编程是一项技术密集型的工作,它涉及到软件与硬件的紧密结合。文章提到,很多从事嵌入式编程的工程师往往是从自动化或电子等相关专业转型而来,这...

    闲谈工厂模式

    在这个标题为“闲谈工厂模式”的讨论中,博主可能分享了关于工厂模式的一些深入见解、实际应用以及与其他设计模式的对比。 工厂模式的核心思想是提供一个创建对象的接口,但让实现这个接口的具体类决定实例化哪个类...

    开发经验,PCB布板闲谈

    本文将基于“开发经验,PCB布板闲谈”的主题,详细介绍PCB设计中的关键知识点和技术细节。 #### 二、PCB设计基础 PCB设计是电子产品设计的重要组成部分,涉及到信号完整性、电源完整性、电磁兼容性(EMI)等多个方面...

    c#定时执行源代码

    c#定时执行源代码

    演讲稿:静坐常思己过,闲谈莫论人非_演讲稿.pdf

    演讲稿:静坐常思己过,闲谈莫论人非_演讲稿.pdf

    闲谈Web图片服务器.rar

    在互联网世界中,Web图片服务器扮演着至关重要的角色。它们负责存储、管理和分发网站所需的图像资源,确保用户能够快速、高效地加载和查看图片。本文将深入探讨Web图片服务器的相关知识点,帮助你理解其工作原理、...

    Photoshop调色教程:闲谈LAB模式计算调色详解.pdf

    Photoshop调色教程:闲谈LAB模式计算调色详解 Photoshop调色教程:闲谈LAB模式计算调色详解是一篇详细的Photoshop调色教程,旨在帮助读者深入了解LAB模式计算调色的原理和应用。 LAB 模式的概念 LAB 模式是一种...

    关于程序设计方法学的一些闲谈

    在早期的计算机时代,由于硬件资源有限,程序员需要极其注重程序的运行效率,常常采用各种技巧来节省存储空间和提高执行速度。这时期的程序设计更加强调编程技巧,如在文中提到的使用汇编语言编写程序以提升性能。 ...

    闲谈酒店管理合同的谈判战术.docx

    尽职调查是其中的一个重要步骤,业主方需对潜在的管理公司进行深入的背景调查。这包括对管理公司的历史业绩、品牌价值、以及过往的管理案例进行综合评估。这一过程不仅有助于评估管理公司的能力和风格是否与业主的...

    河北省青龙满族自治县逸夫中学高中语文 第6专题 第16课 春末闲谈学练案 苏教版选修《现代散文选读》.doc

    《春末闲谈》是鲁迅先生的一篇散文,收录在苏教版高中语文选修教材《现代散文选读》中。这篇文章通过闲谈的形式,深入浅出地探讨了统治者与被统治者之间的矛盾,以及封建统治者所采用的麻痹民众的手段。以下是该文的...

    闲谈

    闲谈 我奇妙的Nuxt.js项目 构建设置 # install dependencies $ npm run install # serve with hot reload at localhost:3000 $ npm run dev # build for production and launch server $ npm run build $ npm run ...

Global site tag (gtag.js) - Google Analytics