千家信息网

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

发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,本篇文章给大家分享的是有关Oracle的扩展统计信息特性是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。oracle 11g在统计
千家信息网最后更新 2025年11月10日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的扩展统计信息特性是怎样的,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

统计 信息 选择 两个 实际 数据 丹麦 特性 条件 表达式 关联 测试 函数 大部分 更多 知识 篇文章 语句 部分 丹麦语 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 三星软件开发云待遇 政治怎样维护网络安全 济南地区浪潮服务器经销电话 金融领域网络安全事件 视频流媒体服务器海康安装多少钱 服务器mime安全策略 我的世界服务器管理插件 美国国际网络安全研究所 帮助网络安全罪罚金什么阶段缴纳 网络安全技能分析题 mysql是个什么的数据库系统 提高网络安全意识的行为 如何创建mysql数据库 南京网络安全准入控制报价 华为服务器主板连接线图 risc服务器多少钱 快手如何连接到云服务器 网络安全标语50字 天泰网络技术有限公司中标 致景科技有限公司工业互联网 格力软件开发视频面试 网络安全技能大赛安庆 数据库大作业火车票订票系统 供电公司网络安全法宣传 mysql所有数据库在哪 上海皓恒网络技术有限公司 小学教育信息化网络安全 重庆智能软件开发团队 数据库闪回技术优点 数据库浮动地址
0