什么是oracle的直方图
直方图是描述表的列值数据分布的一种状态,它以桶(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的直方图相关推荐
- ORACLE的直方图的一些试验
一.何谓直方图: 直方图是一种统计学上的工具,并非Oracle专有.通常用于对被管理对象的某个方面的质量情况进行管理,通常情况下它会表现为一种几何图形表,这个图形表是根据从实际环境中所收集来的被管理对 ...
- Oracle列直方图的问题隐患
点击上方"蓝字" 关注我们,享更多干货! 第一章 Oracle列直方图介绍 众所周知 ,列的直方图主要用于针对数据倾斜的情况,能帮助数据库更准确的了解数据的分布情况,从而选择更高效 ...
- Oracle的直方图试验
点击上方"蓝字" 关注我们,享更多干货! 直方图有两种类别,频率直方图与高度均衡直方图. 直方图有两种类别,频率直方图与高度均衡直方图. 默认的,如果一个倾斜列上的唯一值超过了25 ...
- oracle中直方图的使用
本文从不绑定变量和绑定变量两种情况讨论直方图的作用 一.不绑定变量 SQL> create table test(name varchar2(10)); 表已创建. SQL> insert ...
- oracle数据库直方图,[转] oracle统计信息(statistics)和直方图(histogram)
oracle统计信息和直方图的理解 以前一直对统计信息的理解就是对行的数据分布的,提供改CBO来选择高效的执行计划.这段时间看了不少资料,对统计有了一个更清晰的认识 统计信息: 1,表中的统计信息 2 ...
- Oracle的直方图
1 直方图的含义 在Oracle数据库中,CBO会默认认为目标列的数据在其最小值LOW_VALUE和最大值HIGH_VALUE之间均匀分布的,并且会按照这个均匀分布原则来计算对目标列施加查询条件后的可 ...
- oracle收集直方图,sql – 在Oracle中创建直方图/频率分布的最佳方法?
如果您的创建时间是日期列,那么这将是微不足道的: SELECT TO_CHAR(CREATE_TIME,'DAY:HH24'),COUNT(*) FROM EVENTS GROUP BY TO_CHA ...
- Oracle优化07-分析及动态采样-直方图
思维导图 07系列文章 Oracle优化07-分析及动态采样-直方图 Oracle优化07-分析及动态采样-DBMS_STATS 包 Oracle优化07-分析及动态采样-动态采样 概述 获取准确的段 ...
- Oracle 直方图理论
一.何为直方图 直方图是一种几何形图表,它是根据从生产过程中收集来的质量数据分布情况,画成以组距为底边.以频数为高度的一系列连接起来的直方型矩形图,如图所示 二.ORACLE 直方图 在Oracle中 ...
最新文章
- SAP MM41 收到报错:Retail materials cannot be maintained.
- css 识别变量中的换行符_跟我一起全面了解一下CSS变量
- tkinter之事件绑定
- SQL点滴20—T-SQL中的排名函数
- 3399引擎_RK3399开发板 AIO-3399C六核高性能主板
- shell脚本详解(四)——循环语句之while循环和until循环(附加例题及解析)
- 前端学习(3132):react-hello-react之react中事件处理
- linux下阻塞的系统调用,Linux下文件的阻塞与非阻塞对部分系统调用的影响
- leetcode 232. 用栈实现队列(Implement Queue using Stacks)
- 读文件到十六进制的函数(Delphi 7 下可用) - 回复 峰哥!!! 的问题
- 【转】千万级并发实现的秘密:内核不是解决方案,而是问题所在!
- 新手十分钟玩转淘宝客推广攻略
- JEECG集成flowable
- 苹果iphone手机蓝牙自动打开故障怎么解决
- zzuli:1000从今天开始入坑C语言
- 策略模式-面向接口编程
- 去除String首尾字符
- Matlab|绘制函数图像
- [渝粤教育] 西南科技大学 特用经济作物栽培技术 在线考试复习资料
- MD文档的表情mark
热门文章
- MOXA Nport在二所ATC的使用方式(川大是UDP方式)
- ym—— Android 5.0学习之Tinting和Clipping
- BZOJ2570:算符破译题解
- Poser pro 2014 在windows10上的安装和破译
- 恶意软件免杀与技术(2022.05.05)
- 网络性能-KPI-KQI-QoS-QoE及映射关系
- 提升程序员编程效率的暗黑三条
- 手把手教你做一个电子相册
- 2021年中国制冷压缩机行业供需及进出口贸易情况分析:制冷压缩机行业需求量增加[图]
- 【物联网(IoT)开发】使用 Arduino 和 Python在 Bluemix 上开发一个 IoT 应用程序之控制LED灯开关