共享池之七:执行计划的生成过程

--------未完待续

生成执行计划的过程:编译器:分为三部分:

2.优化器:--包括三个部分

查询转换器RBO-->CBO,目前是CBO ,optimizer_mode--ALL_ROWS参数值,适合OLTP。FIRST_ROWS_N适合分页,OLAP。

 

查询转化器:

视图合并--视图时直接用视图SQL语句对应表做基表进行连接。

谓词推进,子查询非嵌套化--相关子查询;OR--UNION合并

 

成本估算器:

拿数据字典里统计信息,主要有:

表:dba_tab_statistics --行数,块数

表中字段:dba_tab_col_statistics --选择率 selectivity  字段:number_distinct

索引:dba_ind_statistics  叶块 高度 聚簇因子

系统评估:CPU IO

数据字典本身:tab$,obj$,col$,con$

内部表:x$bh,x$ksmsp

 

计划生成器:访问路径--索引OR全表扫描,表连接的类型、顺序和方法

 Oracle根据提交的SQL语句再查询相应的数据对象是否有统计信息。如果有统计信息的话,那么CBO将会使用这些统计信息产生所有可能的执行计划(可能多达成千上万个)和相应的Cost,最终选择Cost最低的那个执行计划。如果查询的数据对象无统计信息,则按RBO的默认规则选择相应的执行计划。这个步骤也是解析中最耗费资源的,因此我们应该极力避免硬解析的产生。

3.行源生成器:执行函数--对应执行计划中

 

4.执行引擎:

 至此,解析的步骤已经全部完成,Oracle将会根据解析产生的执行计划执行SQL语句和提取相应的数据。

你可能感兴趣的:(共享池之七:执行计划的生成过程)