• 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:返回整个表的部分(不宜太大)

    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论坛的分页处理。

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

    4、All_rows模式

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

  • 相关阅读:
    WP8.1 UI 编程 四、图形
    分治法 全排列问题的一个Java实现
    合并排序算法时间复杂度分析
    js如何实现复制粘贴功能
    关于<meta name="applicable-device"content="pc">
    ready
    css文字强制大写输入
    关于input,button标签在苹果手机上显示阴影解决办法
    【C#】中用if判断值是否是否为空
    视频格式MP4,需要转码
  • 原文地址:https://www.cnblogs.com/timlong/p/7456937.html
Copyright © 2020-2023  润新知