当前位置:数据分析 > 下面说一下Oracle执行计划的步骤顺序

下面说一下Oracle执行计划的步骤顺序

  • 发布:2023-10-10 10:09

学习Oracle好久了,给大家分享一下。读完这篇文章你一定会有很多收获。我希望这篇文章可以教给你更多的东西。 Oracle 执行计划的每个步骤都会返回一组行,这些行要么在下一步中使用,要么在最后一步中返回给发出 SQL 语句的用户或应用程序。每个步骤返回的行集称为行源。下面的树形图显示了从一个步骤到另一步骤的数据流。每个步骤的编号反映了观察 Oracle 执行计划时显示的步骤顺序(简要说明了如何观察 Oracle 执行计划)。通常,这不是每个步骤的执行顺序。 Oracle 执行计划的每一步要么从数据库检索行,要么从一个或多个行源接收行数据作为输入: 红框指示的步骤从数据库中的数据文件中物理检索数据。此步骤称为访问路径。 Oracle 中可以使用的访问路径将在后面详细介绍: ◆第3 步和第6 步分别从EMP 表和SALGRADE 表中读取所有行。 ◆步骤5 在PK_DEPTNO 索引中查找步骤3 返回的每个DEPTNO 值。它找出与 DEPT 表关联的那些行的 ROWID。 ◆步骤4检索步骤5中从DEPT表中返回ROWID的行。 黑色文本框指出的步骤对行源进行操作,例如两个表之间的关联、排序或过滤。后面会详细介绍: ◆ 步骤 2 实现嵌套循环操作(相当于(C 语句中的嵌套循环),接收步骤 3 和步骤 4 中的行源,将步骤 3 中源中的每一行与其对应的行连接起来) ◆步骤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执行计划就是我们真正需要的,后面会给出详细说明。现在我们来看看一些初步知识。 【编辑精选】 ORACLE执行计划的一些基本概念 利用Oracle执行计划机制提高查询性能 简单描述Oracle编码的SQL 代码解释了 Oracle 的可选性 Oracle管理工具Oracle SQL Handler的功能列表

相关文章

最新资讯