我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle的扩展统计信息特性是怎样的

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle的扩展统计信息特性是怎样的

本篇文章给大家分享的是有关Oracle的扩展统计信息特性是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

oracle 11g在统计信息收集方面增加了扩展统计信息的特性,它可以收集一个表中相关列上的统计信息,也可以收集函数表达式上的统计信息.使选择率,成本的估计更加准确,也更容易走正确的执行计划.在相关列上收集统计信息,好处还是很明显的.例如两列在逻辑上有一定的关系,但如果只是对这两个列单独做统计信息的收集,根据多条件的选择率计算{ (A AND B的选择率为:OPSEL[a]*OPSEL[b]); (A OR B 的选择率为:OPSEL[a]+OPSEL[b]-OPSEL[a]OPSEL[b]); (NOT A的选择率为:1-OPSEL[a])}, 估算出来的选择率就可能偏差很大.

可以针对关联列或者表达式来收集扩展统计信息。关联列是指,假设有个世界人口表,使用谓词country = 'Denmark' and language = 'Danish', 对于这张表中的大部分记录来讲,这两个限制条件很可能适用于同一批记录。事实上,说丹麦语的人大部分住在丹麦,大部分住在丹麦的人说丹麦语。也就是说,这两个约束条件几乎是冗余的,这样的列通常被叫做关联列(correlated column), 也给优化器出了难题。这是因为,没有对象统计信息或者直方图来描述数据之间的依赖关系。换句话说,查询优化器实际上假定存储在不同列上的数据是不相关的。

以下测试:
DB Version:11.2.0.4
----产生测试数据
drop table scott.test01 purge;
create table scott.test01 as select * from dba_objects;

--把object_name 更新为和object_type一样,用于测试.
update scott.test01 set object_name=object_type;
commit;

1.收集单列统计信息,查看执行计划
--收集单列统计信息

exec dbms_stats.gather_table_stats('SCOTT','TEST01');

--查看表的行数
select  table_name,num_rows from dba_tables where owner = 'SCOTT' and table_name = 'TEST01';

TABLE_NAME                       NUM_ROWS
------------------------------ ----------
TEST01                              87048

--产生语句的执行计划
explain plan for select * from scott.test01 where object_name='INDEX' and object_type='INDEX';

SQL> select * from table(dbms_xplan.display());



这里可以看到,估算的返回行数是41,显然和实际相差很远

--行数估算
select rpad(column_name, 30, ' ') column_name,
       rpad(num_distinct, 8, ' ') num_distinct,
       rpad(utl_raw.cast_to_varchar2(low_value), 15, ' ') low_value,
       rpad(utl_raw.cast_to_varchar2(high_value), 10, ' ') high_value,
       rpad(num_nulls, 8, ' ') num_nulls,
       rpad(avg_col_len, 6, ' ') avg_col_len,
       rpad(density, 20, ' ') density,
       histogram
  from dba_tab_col_statistics
 where owner = 'SCOTT'
   and table_name = 'TEST01'
   and column_name in ('OBJECT_NAME', 'OBJECT_TYPE');

SQL> col COLUMN_NAME for a15
SQL> col LOW_VALUE for a15
SQL> col HIGH_VALUE for a15
SQL> select rpad(column_name, 30, ' ') column_name,
  2         rpad(num_distinct, 8, ' ') num_distinct,
  3         rpad(utl_raw.cast_to_varchar2(low_value), 15, ' ') low_value,
  4         rpad(utl_raw.cast_to_varchar2(high_value), 10, ' ') high_value,
  5         rpad(num_nulls, 8, ' ') num_nulls,
  6         rpad(avg_col_len, 6, ' ') avg_col_len,
  7         rpad(density, 20, ' ') density,
  8         histogram
  9    from dba_tab_col_statistics
 10   where owner = 'SCOTT'
 11     and table_name = 'TEST01'
 12     and column_name in ('OBJECT_NAME', 'OBJECT_TYPE');


估算的返回行数是41,是由两个列的density相乘再乘以表的行数得到,0.0217391304347826*0.0217391304347826*87048=41.1379962=41
   
2.收集多列扩展统计信息,查看执行计划
--收集多列扩展统计信息

exec dbms_stats.gather_table_stats('scott','test01',method_opt =>'for columns (object_name,object_type)');

--产生语句的执行计划  
explain plan for select * from scott.test01 where object_name='INDEX' and object_type='INDEX';

SQL> select * from table(dbms_xplan.display());



--查询实际返回行数:
SQL> select count(*) from scott.test01 where object_name='INDEX' and object_type='INDEX';

  COUNT(*)
----------
      5078

这里可以看到,执行计划估算的返回行数是4986,已经基本上和实际返回行数5078相近了.

PS:
1.扩展统计信息的收集,可以用
select dbms_stats.create_extended_stats('scott','test01','(object_name,object_type)')from dual 方式创建扩展统计列, 然后dbms_stats.gather_table_stats('scott','test01') 收集统计信息 ; 也可以直接在dbms_stats.gather_table_stats中的method_opt属性同时建立扩展统计收集统计数据.例如如下:
dbms_stats.gather_table_stats('scott','test01',method_opt =>'for columns (object_name,object_type)');

2.oracle 11g不仅可以收集多列扩展统计信息,还可以收集函数和表达式的扩展统计信息.

以上就是Oracle的扩展统计信息特性是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle的扩展统计信息特性是怎样的

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

oracle自动统计信息时间的修改过程是怎样的

本篇文章为大家展示了oracle自动统计信息时间的修改过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。今天是2022年1月10日今天值夜班,同事让给优化一个sql,优化完成后,顺便看了下新
2023-06-26

oracle统计信息收集的方法是什么

Oracle数据库中对表的统计信息可以通过以下方法进行收集:自动统计信息收集:Oracle数据库会自动收集表的统计信息,以便优化查询计划。可以通过设置参数 AUTOSTATS_TARGET 来控制自动收集统计信息的目标。手动收集统计信息:可
oracle统计信息收集的方法是什么
2024-04-09

显示系统信息与硬件信息的bat代码是怎样的

这期内容当中小编将会给大家带来有关显示系统信息与硬件信息的bat代码是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。显示系统信息的dos命令,使用批处理显示硬件信息的批处理方法1. cmd窗口查看:
2023-06-08

ORACLE 11g的新特性延迟段创建是怎么样的

这期内容当中小编将会给大家带来有关ORACLE 11g的新特性延迟段创建是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE
2023-06-06

Java实现学生信息管理系统的流程是怎样的

这篇文章给大家介绍Java实现学生信息管理系统的流程是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、项目简述功能包括: 用户的登录注册,学生信息管理,教师信息管理,班级信 息管理,采用mvcx项目架构,覆盖增
2023-06-25

信息系统项目管理师论文写作格式是怎样的

  信息系统项目管理师论文写作格式是怎样的?大家在考前要清楚信息系统项目管理师论文的写作格式要求,今天编程学习网小编就来告诉大家信息系统项目管理师论文格式要求是怎样的。  以下编程学习网小编为大家整理了的软考论文写作格式要求以及写作方法与规范,相信对大家了解信息系统项目管理师论文写作会有帮助。  高级软考考试中一共有三科,下午
信息系统项目管理师论文写作格式是怎样的
2024-04-18

编程热搜

目录