暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 19C SQL执行

原创 Asher.HU 2021-02-04
508

在执行期间,SQL引擎执行在由行源发生器产生的树的每一行的源。此步骤是DML处理中的唯一必需步骤。

图3-3执行树,也称为解析树,它显示了示例3-1中计划中从一个步骤到另一个步骤的行源的流程通常,执行步骤的顺序与计划中的顺序相反,因此您要从下至上阅读计划。

执行计划中的每个步骤都有一个ID号。图3-3中的数字对应Id示例3-1中所示计划中Operation计划列中的初始空格表示层次关系。例如,如果一个操作的名称以两个空格开头,则此操作是一个以一个空格开头的操作的子级。以空格开头的运算符是SELECT语句本身的子级。

图3-3行源树

图3-3中,树的每个节点都充当行源,这意味着示例3-1中的执行计划的每个步骤要么从数据库中检索行,要么接受来自一个或多个行源的行作为输入。SQL引擎执行每个行源,如下所示:

  • 黑框指示的步骤实际上是从数据库中的对象检索数据。这些步骤是访问路径,或用于从数据库检索数据的技术。
    • 第6步使用全表扫描从departments表中检索所有行
    • 步骤5使用全表扫描从jobs表中检索所有行
    • 步骤4 emp_name_ix按顺序扫描索引,查找以字母开头的每个键A并检索相应的rowid。例如,与对应的rowid AtkinsonAAAPzRAAFAAAABSAAe
    • 第3步从employees表中检索第4步返回了rowid AAAPzRAAFAAAABSAAe的行Atkinson例如,数据库使用rowid 检索的行
  • 清除框指示的步骤对行源起作用。
    • 第2步执行哈希联接,接受第3步和第5步的行源,在第3步中将第5步行源中的每一行连接到其对应的行,然后将结果行返回到第1步。

      例如,employee的行Atkinson与工作名称关联Stock Clerk

    • 步骤1执行另一个哈希联接,接受来自步骤2和6的行源,将来自步骤6的源的每一行连接到步骤2中的相应行,并将结果返回给客户端。

      例如,employee的行Atkinson与名为的部门相关联Shipping

在某些执行计划中,这些步骤是迭代的,而在其他计划中则是顺序的。例3-1中所示的哈希联接是顺序的。数据库根据连接顺序完整地完成步骤。数据库以的索引范围扫描开始emp_name_ix数据库使用从索引中检索的行标识读取employees表中匹配的行,然后扫描jobs表。jobs表中检索行后,数据库将执行哈希联接。

在执行期间,如果数据不在内存中,则数据库会将数据从磁盘读取到内存中。该数据库还将取出确保数据完整性所需的所有锁和闩锁,并记录在SQL执行期间所做的任何更改。处理SQL语句的最后阶段是关闭游标。



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论