zoukankan      html  css  js  c++  java
  • 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行,而不管所有结果返回的时长,可能最后一条记录要很长时间之后才能获得。

  • 相关阅读:
    HDU4685 Prince and Princess 完美搭配+良好的沟通
    坚持 本身是一种策略
    PowerDesigner中SQL文件、数据库表反向生成PDM
    Filter技术+职责链模式
    [ACM] poj 1258 Agri-Net (最小生成树)
    android 屏幕适配 课程笔记
    HDU 5071 Chat
    【玩转微信公众平台之中的一个】序章(纯粹扯淡)
    HTML表格标签的使用-&lt;table&gt;
    hdu 1251 统计难题 (map水过)
  • 原文地址:https://www.cnblogs.com/timlong/p/7456937.html
Copyright © 2011-2022 走看看