5.1 解析步骤

图5-1是Oracle官方文档的中SQL解析步骤。我们看一下解析过程做了哪些操作。

图5-1中涉及的命令及含义如下。

·Syntax Check:语法检查。数据库会检查SQL语句的语法拼写,以保证是其一个有效的SQL语句。常见的错误是拼写错误,如将FROM写成FORM。

·Semantic Check:语义检查。数据库会对SQL语句进行语义分析,其中包括对象的有效性、是否有访问权限等。

·Shared Pool Check:数据库首先将SQL文本转化为ASCII字符,然后根据哈希算法计算其对应的值(就是对应于V$SQL.SQL_ID)。根据计算出的这个值到共享池中的一个区域(就是library cache)中找到对应的一块结构(又称bucket),然后比较bucket里是否存在该SQL语句。如果找到该语句,则返回对应的执行计划(可能有多个,需要选择一个)。如果没有找到,则进入硬解析的过程。

·Hard Parse:即硬解析。如果数据库无法在内存中找到这条语句,则需要经历一个硬解析的过程。在这个过程中需要申请一块内存空间(并通过名叫latch的结构保证不被别人访问)。同时,需要访问数据字典获得对象必要的信息。

·Soft Parse:除去Hard Parse,都可以称为Soft parse。

·Optimization:在这一阶段,数据库会根据很多因素由优化器生成最优的执行计划。

·Row Source Generation:所谓“Row Source”,是指在上面的执行计划中每一步采用什么样的方法去关联、获得数据。Row Source可能对应于表、视图、结果集、表关联操作、分组操作等。最终结果是一棵树的形态。

·Execution:这一步就是执行器根据Row Source树的每一步去执行。

图5-1 SQL 解析步骤