Oracle中CBO优化器简介

Oracle中CBO优化器简介

      Oracle数据库中的优化器是SQL分析和执行的优化工具。它负责制定SQL的执行计划,也就是它负责保证SQL的执行计划的效率最高,比如优化器决定Oracle以什么样的方式访问数据,优化器是SQL执行的核心,它作出的执行计划的好坏,直接影响着SQL的执行效率。

1、执行计划中数据的访问方式:

直接表(无索引)的访问:并行

多数据块

通过索引访问:

index unique scan(=唯一值)

Index range scan(<,>范围)                                                                                    

Index full scan(order by, <>)

Index fast full scan(count(index))

Index skip scan(前导重复率高的联合索引)

当要返回的数据量占整个表的大部分时,建议使用全表扫描(并行、多块读)

FFS(index fast full scan)常用于count(索引列),可以对索引进行多数据块读(只要求和,不需要依次扫描)

index range scan:返回整个表的部分(不宜太大)

Oracle中CBO优化器简介_第1张图片

2、执行计划中数据的关联处理:

Nested loop join:嵌套循环

Merge join:先将表排序

Hash join:hash定位

HJ:关联中有一个表比较小(将被做成hash表存放在内存中)、表上没有索引、返回结果集比较大

NL:关联中有一个表比较小、被关联表(大表)的关联字段上有索引、索引的键值的重复率不应过高

ML:中间过程的结果集已经排过序(比较少见,通常是对最终结果进行排序)

 

CBO优化器有两者可以选择的运行模式:

First_rows(n)

All_rows

3、First_rows(n)模式

当设置为first_rows(n)模式时,Oracle在执行SQL时,会优选考虑将结果集的前N条记录以最快的速度反馈回来,而其他的结果并不需要同时返回。这种设置常用于一些电子商务网站或者BBS论坛的分页处理。

 Oracle中CBO优化器简介_第2张图片

需要注意的是order 不要的字段必须创建索引。否则Oracle会忽略first_rows而选择使用all_rows

4、All_rows模式

当设置为all_rows()模式时,Oracle会以最快的速度将全部的SQL执行完毕,并将所有的结果集反馈回来。All_rows模式在OLAP系统中用的比较多,all_rows强调SQL整体的执行效率,而first_rows(n)强调以最快的速度返回前n行,而不管所有结果返回的时长,可能最后一条记录要很长时间之后才能获得。

 

 

你可能感兴趣的:(Oracle中CBO优化器简介)