设为首页 收藏本站
查看: 912|回复: 0

[经验分享] oracle统计信息和直方图的理解

[复制链接]

尚未签到

发表于 2018-9-23 10:37:54 | 显示全部楼层 |阅读模式
  以前一直对统计信息的理解就是对行的数据分布的,提供改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>
  exec dbms_stats.gather_table_stats('用户', '表',cascade=>false, method_opt=>'for columns 列>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-600187-1-1.html 上篇帖子: 【Oracle性能调整的要点之SGA】 下篇帖子: 【转】oracle分区表总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表