直方图是描述表的列值数据分布的一种状态,它以桶(buckets)的形式存储。直方图根据列中值的不同和数据分布,又分为频率直方图(Frequency histograms and top frequency histograms)、高度平衡直方图(Height-Balanced histograms (legacy))和混合直方图(Hybrid histograms )。oracle优化器在默认的情况下会认为列中不同的值是均匀分布的,对于列值是非均匀分布的情况下,直方图可以帮助优化器精准的计算出filter或是各种join产生的rows的基数。
    直方图是如何产生的呢?可以通过DBMS_STATS的方式收集表的统计信息。当一个SQL查询表的一个列时,oracle会根据这个SQL的workload(也就是列的数据量)自动的产生直方图信息。
    直方图信息产生的过程是这样:1、通过DBMS_STATS把参数 METHOD_OPT设置为SIZE AUTO ;2、运行sql查询该表数据; 3、ORACLE DATABASE 会根据运行的SQLl判断和更新数据字典表SYS.COL_USAGE$ ;4、再次运行DBMS_STATS,让DBMS_STATS去查询字典表SYS.COL_USAGE$来判断那一列需要创建直方图信息。

实例1:database自动收集列的直方图信息

    SQL> CREATE TABLE RECORD1 AS SELECT * FROM RECORD;Table createdSQL> CREATE INDEX I_RECORD1_ENT ON RECORD1(ENTERPRISE_ID);Index createdSQL> CREATE INDEX I_RECORD1_ENT_TM ON RECORD1(ENTERPRISE_ID,TEMPLATE_ID);Index createdSQL> select table_name,column_name,num_distinct,num_buckets,histogram from dba_tab_col_statistics where owner='MTS' and table_name='RECORD1';TABLE_NAME COLUMN_NAME NUM_DISTINCT NUM_BUCKETS HISTOGRAM------------------------------ ------------------------------ ------------ ----------- ---------------SQL> select count(*) from record1 where enterprise_id = 'SXdxyw'2 ;COUNT(*)----------2710SQL> exec dbms_stats.gather_table_stats(ownname => 'mts',tabname => 'record1',method_opt => 'for all columns size auto');PL/SQL procedure successfully completedSQL> select table_name,column_name,num_distinct,num_buckets,histogram from dba_tab_col_statistics where owner='MTS' and table_name='RECORD1';TABLE_NAME                     COLUMN_NAME                    NUM_DISTINCT NUM_BUCKETS HISTOGRAM------------------------------ ------------------------------ ------------ ----------- ---------------RECORD1                        ID                                   419313           1 NONERECORD1                        ENTERPRISE_ID                           741         254 HEIGHT BALANCEDRECORD1                        OPERATOR_ID                            7629           1 NONERECORD1                        TEMPLATE_ID                            1148           1 NONERECORD1                        WORK_CODE                               608           1 NONERECORD1                        NAME                                 121552           1 NONERECORD1                        CREATE_TIME                          411904           1 NONERECORD1                        ACTUAL_LONGITUDE                     146240           1 NONERECORD1                        ACTUAL_LATITUDE                      145056           1 NONERECORD1                        ACTUAL_LOCDESC                        41248           1 NONERECORD1                        CONTENT                               50040           1 NONERECORD1                        DELETE_STATE                              2           1 NONERECORD1                        CITY_NAME                                 3           1 NONERECORD1                        COUNTY_NAME                               3           1 NONERECORD1                        PROVINCE_NAME                             3           1 NONERECORD1                        PIC_NUM                                   8           1 NONE16 rows selectedSQL>

ORACLE DATABASE是选择直方图的类型,主要是通过多种不同的标准来的。 首先是 NDV(Number of distinct values),NDV是列中不相同的值的数量;另外就是 N, N是直方图桶(histogram buckets)的数量,最大是254个,  最后就是 P ,基线百分比,是根据直方图生产的桶数量来计算的,公式(1–(1/n)) * 100。例如n=254,P=99.6。和直方图生产类型相关的另外一个参数是estimate_percent,这个参数默认值为AUTO_SAMPLE_SIZE,可以通过DBMS_STATS设置。
  下图表示直方图选择的类型因素。

转载于:https://www.cnblogs.com/Jace06/p/8403545.html

什么是oracle的直方图相关推荐

  1. ORACLE的直方图的一些试验

    一.何谓直方图: 直方图是一种统计学上的工具,并非Oracle专有.通常用于对被管理对象的某个方面的质量情况进行管理,通常情况下它会表现为一种几何图形表,这个图形表是根据从实际环境中所收集来的被管理对 ...

  2. Oracle列直方图的问题隐患

    点击上方"蓝字" 关注我们,享更多干货! 第一章 Oracle列直方图介绍 众所周知 ,列的直方图主要用于针对数据倾斜的情况,能帮助数据库更准确的了解数据的分布情况,从而选择更高效 ...

  3. Oracle的直方图试验

    点击上方"蓝字" 关注我们,享更多干货! 直方图有两种类别,频率直方图与高度均衡直方图. 直方图有两种类别,频率直方图与高度均衡直方图. 默认的,如果一个倾斜列上的唯一值超过了25 ...

  4. oracle中直方图的使用

    本文从不绑定变量和绑定变量两种情况讨论直方图的作用 一.不绑定变量 SQL> create table test(name varchar2(10)); 表已创建. SQL> insert ...

  5. oracle数据库直方图,[转] oracle统计信息(statistics)和直方图(histogram)

    oracle统计信息和直方图的理解 以前一直对统计信息的理解就是对行的数据分布的,提供改CBO来选择高效的执行计划.这段时间看了不少资料,对统计有了一个更清晰的认识 统计信息: 1,表中的统计信息 2 ...

  6. Oracle的直方图

    1 直方图的含义 在Oracle数据库中,CBO会默认认为目标列的数据在其最小值LOW_VALUE和最大值HIGH_VALUE之间均匀分布的,并且会按照这个均匀分布原则来计算对目标列施加查询条件后的可 ...

  7. oracle收集直方图,sql – 在Oracle中创建直方图/频率分布的最佳方法?

    如果您的创建时间是日期列,那么这将是微不足道的: SELECT TO_CHAR(CREATE_TIME,'DAY:HH24'),COUNT(*) FROM EVENTS GROUP BY TO_CHA ...

  8. Oracle优化07-分析及动态采样-直方图

    思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 概述 获取准确的段 ...

  9. Oracle 直方图理论

    一.何为直方图 直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边.以频数为高度的一系列连接起来的直方型矩形图,如图所示 二.ORACLE 直方图 在Oracle中 ...

最新文章

  1. SAP MM41 收到报错:Retail materials cannot be maintained.
  2. css 识别变量中的换行符_跟我一起全面了解一下CSS变量
  3. tkinter之事件绑定
  4. SQL点滴20—T-SQL中的排名函数
  5. 3399引擎_RK3399开发板 AIO-3399C六核高性能主板
  6. shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)
  7. 前端学习(3132):react-hello-react之react中事件处理
  8. linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响
  9. leetcode 232. 用栈实现队列(Implement Queue using Stacks)
  10. 读文件到十六进制的函数(Delphi 7 下可用) - 回复 峰哥!!! 的问题
  11. 【转】千万级并发实现的秘密:内核不是解决方案,而是问题所在!
  12. 新手十分钟玩转淘宝客推广攻略
  13. JEECG集成flowable
  14. 苹果iphone手机蓝牙自动打开故障怎么解决
  15. zzuli:1000从今天开始入坑C语言
  16. 策略模式-面向接口编程
  17. 去除String首尾字符
  18. Matlab|绘制函数图像
  19. [渝粤教育] 西南科技大学 特用经济作物栽培技术 在线考试复习资料
  20. MD文档的表情mark

热门文章

  1. MOXA Nport在二所ATC的使用方式(川大是UDP方式)
  2. ym—— Android 5.0学习之Tinting和Clipping
  3. BZOJ2570:算符破译题解
  4. Poser pro 2014 在windows10上的安装和破译
  5. 恶意软件免杀与技术(2022.05.05)
  6. 网络性能-KPI-KQI-QoS-QoE及映射关系
  7. 提升程序员编程效率的暗黑三条
  8. 手把手教你做一个电子相册
  9. 2021年中国制冷压缩机行业供需及进出口贸易情况分析:制冷压缩机行业需求量增加[图]
  10. 【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关