统计空值率oracle,oracle统计信息和直方图的理解

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

统计信息:

1,表中的统计信息

2,索引列的统计信息

3,一般列的统计信息

表的统计信息:1,表行数,使用的块数,空的块数,块的使用率,行迁移和链接的数量,pctfree,pctused的数据,行的平均大小

-->select NUM_ROWS, --表中的记录数

BLOCKS, --表中数据所占的数据块数

EMPTY_BLOCKS, --表中的空块数

AVG_SPACE, --数据块中平均的使用空间

CHAIN_CNT, --表中行连接和行迁移的数量

AVG_ROW_LEN --每条记录的平均长度

from user_tables

索引列的统计信息 1,索引的深度(B-Tree的级别),索引叶级的块数量,集群因子(clustering_factor), 唯一值的个数

-->select BLEVEL, --索引的层数

LEAF_BLOCKS, --叶子结点的个数

DISTINCT_KEYS, --唯一值的个数

AVG_LEAF_BLOCKS_PER_KEY, --每个KEY的平均叶块个数

AVG_DATA_BLOCKS_PER_KEY, --每个KEY的平均数据块个数

CLUSTERING_FACTOR --群集因子

from user_indexes

列的统计信息 1,唯一的值个数,列最大小值,密度(选择率),数据分布(直方图信息),NUll值个数

-->select NUM_DISTINCT, --唯一值的个数

LOW_VALUE, --列上的最小值

HIGH_VALUE, --列上的最大值

DENSITY, --选择率因子(密度)

NUM_NULLS, --空值的个数

NUM_BUCKETS, --直方图的BUCKET个数

HISTOGRAM --直方图的类型

from user_tab_columns

直方图:是统计信息一种,对数据分布的统计,目的是为了更精确的得到选择率和基数,CBO才能估计出最优的执行计划。

上一篇我们知道了统计信息在:表,列,索引上能够获取的统计信息,但如果有一个sql:

select * from table where x=1;(在x列上有索引)

那Oracle如何选择是表扫描,索引查询数据,通过对列列的统计信息,但没有直方图,CBO优化器不知道x=1的数据有多少?无法提供数据参考。有两钟情况:

table表中:1,x=1的数据比如就一条 CBO优化器:应该索引查找

2,x=1的数据有很多条,CBO优化器:这时应该表扫描

如果索引列没有直方图,索引上有最大,最小值,总行数,那就不能知道x=1在表中大概有多少行。如果只是有索引上统计信息,就无法获取大概的数据分布

CBO也就得不到正确的结果。

对于数据分布均匀的列,直方图没意义,对应列中数据分布比较倾斜的列(不均匀),直方图就非常有用。CBO就可以估计大概的数据分布,计算查询的选择率和基数也更精确。

所以直方图有两种:1,高度均衡直方图 2,频率直方图

高度均衡直方图: 数据分布不均匀 ,由于列中数据很多,这时数据比较密集,不利于分析和评估,这时直方图需要均衡化。

频率直方图:就是数据分布很均匀,

得到的直方图:信息的准确性就由两个数值决定,一个是bucket的个数,一个NUM_DISTINCT的个数。

一般来说,bucket的数据越多,关于列数据分布的信息就越正确,但统计直方图的花费的时间和资源就多,oracle中bucket的最大254个,默认是75个。而SQL Server默认是200个。

在oracle中要删除直方图信息就是设置bucket的数据为1,如下:

Analyze table 表 compute statistics for table for columns id size 1;

exec dbms_stats.gather_table_stats('用户', '表',cascade=>false, method_opt=>'for columns 列 size 1');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值