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语句和提取相应的数据。