欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

SQL在Oracle内部的具体处理流程

程序员文章站 2022-06-06 14:51:45
...

下图显示了SQL在Oracle内部处理的一般阶段:解析、优化、产生行源和执行。数据库可能会忽略某些步骤,这取决于具体的语句。

(看来,SQL文本的哈希值是在PGA中产生的)。

如果检查到共享库中有一个语句具有相同的哈希值,则数据库在执行语义和环境检查(工作区大小或优化器设置等),当然还有语句本身的书写(大小写,,空格,注释等)。

详情可参见笔记:《Oracle性能调优之硬解析与软解析》

2,SQL优化

查询优化是选择执行SQL语句的最有效手段的过程。数据库对查询的优化基于对正在访问的实际数据收集的统计信息。优化器使用行数、数据集大小 和 其他因素来生成各种可能的执行计划,并为每个计划分配一个成本值。数据库会使用具有最低成本的计划。

数据库对每个唯一的DML语句必须至少执行一次硬解析,并在硬解析期间执行优化。DDL永远不会被优化,除非他包括需要优化的DML组件,如子查询。

3,SQL行源生成

行源生成器是一种软件,它从优化器接受经过优化的执行计划,并生成一个称为查询计划的迭代计划,一共数据库的其余部分使用。查询计划采用组合多个步骤的形式,每一步返回一个行集。该集合中的行可以在下一步被使用,火灾最后一步返回给发出SQL语句的应用程序。

行源就是执行计划中的某一步多返回的行集,且带有能够迭代该行集的控制结构,行源可以是表、视图、或连接操作或分组操作的结果。

行源生成器产生一个行源树,它是一个行源的集合。(就是我们看到的执行计划)

4,SQL执行

在执行期间,SQL引擎执行行源生成器所产生的数中的每个行源。这一步是在DML处理中唯一的强制性步骤。在执行计划中,我们经常看到就是的一个执行树,显示了行源从一部流向另一步。通常,执行步骤的顺序与几乎是顺序相反,所以我们应该从底向上来阅读计划。在operation列中的初始空格表示层次结构关系。例如,如果一个操作的名称前面有两个空格,则此操作是前面有一个空格的操作的子操作。前面有一个空格的操作是select语句本身的子操作。

参考:#CNCPT216