ORACLE柱状图(histogram)

Oracle柱状图用于记录表中数据分布,帮助CBO优化器选择执行计划。柱状图分为NONE、FREQUENCY和HEIGHT BALANCED三种类型。创建和管理柱状图需谨慎,频繁分析可能导致性能问题。正确选择需要柱状图的列,如在SQL调优时。柱状图影响执行计划的例子展示了删除和搜集柱状图如何改变CBO的决策,例如在特定查询中从索引转向全表扫描。
摘要由CSDN通过智能技术生成
 

oracle 柱状图(histogram)

oracle中的柱状图是用于记录表中的数据分布质量情况的描述,当每次使用analyze或者dbms_stat包分析数据表及列后,该表的分布情况会呗保存在统计表

(user_tab_columns/user_histograms)里面,当多表连接时,CBO优化器会根据柱状图提供的信息评估多表连接时将产生的成本(cost)或技术(cardinality),决定是否使用该列的索引,当然,导致CBO不能选择最优执行计划的因素有多种情况,而柱状图只是协助CBO优化器选择最优的执行计划,在一个数据分布不均匀的表列上建立柱状图将有力地保证优化器做出正确合理的选择。

其他因素后面在进行探讨。 (直方图的使用不受索引的限制,可以在表的任何列上构建直方图)

1. 搜集柱状图

SQL> conn scott/tiger
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as scott
 
SQL> select table_name from user_tables;
 
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
 
SQL> exec dbms_stats.gather_table_stats(ownname=>'scott',tabname => 'dept',estimate_percent => null,method_opt => 'for all indexed columns',cascade => true);
 
PL/SQL procedure successfully completed
 
SQL> select column_name,density,num_buckets,histogram from user_tab_col_statistics where table_name='DEPT';
 
COLUMN_NAME                       DENSITY NUM_BUCKETS HISTOGRAM
------------------------------ ---------- ----------- ---------------
DEPTNO                              0.125           4 HEIGHT BALANCED
DNAME                                0.25           1 NONE
LOC                                  0.25           1 NONE

SQL> select * from dept;
 
DEPTNO DNAME          LOC
------ -------------- -------------
    10 ACCOUNTING     NEW YORK
    20 RESEARCH       DALLAS
    30 SALES          CHICAGO
    40 OPERATIONS     BOSTON

SQL> select * from user_tab_histograms where table_name='DEPT';
 
TABLE_NAME                     COLUMN_NAME                 ENDPOINT_NUMBER     ENDPOINT_VALUE   ENDPOINT_ACTUAL_VALUE
------------------------------ --------------------------------------------  ---------------   -----------------------------
DEPT                           DEPTNO                             1             10
DEPT                           DEPTNO                             2             20
DEPT                           DEPTNO                             3             30
DEPT                           DEPTNO                             4             40
DEPT                           DNAME                              0    3.388635500875
DEPT                           LOC                                0   3.443005050520
DEPT                           DNAME                              1   4.322850386777
DEPT                           LOC                                1   4.064055440899
  
8 rows selected

柱状图的搜集有三个参数,for columns <list> SIZE <N> | REPEAT | AUTO | SKEWONLY:统计指定列的histograms.N的取值范围[1,254]; REPEAT上次统计过的histograms;AUTO由oracle决定

N的大小;SKEWONLY

在上面柱状图搜集中,histogram字段有三个值,NONE,FREQUENCY或者HEIGHT BALANCED
  a. NONE:就是没有直方图
  b. FREQUENCY: 当该列的distinct值数量<=bucket数量时,为此类型。在user_tab_histograms表中记录有相关的值
  c. HEIGHT BALANCED:当该列的distinct值数量>bucket数量时,为此类型。
  d. density字段值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值