ORACLE的统计信息在执行SQL的过程中扮演着非常重要的作用,而且ORACLE在表的各个层次都会有不同的统计信息,通过这些统计信息来描述表的,列的各种各样的统计信息。下面通过一个复合分区表来说明一些常见的和不常见的统计信息。

搭建测试用例

--创建表。
SQL>
create table test
partition by range(object_id)
subpartition by hash(object_type) subpartitions 4
(partition p1 values less than(10000),
partition p2 values less than(20000),
partition p3 values less than(30000),
partition p4 values less than(maxvalue))
as
select * from dba_objects; --收集统计信息
sql>
BEGIN
dbms_stats.gather_table_stats( ownname => 'NC60',
tabname => 'TEST',
estimate_percent => 100, --百分之百采样
block_sample => FALSE,
method_opt => 'FOR ALL COLUMNS SIZE 10', --收集直方图
granularity => 'ALL', --所有分区
cascade => TRUE --收集索引
);
END;

1,表级的统计信息

SQL> select table_name,num_rows,blocks,empty_blocks,avg_space
2 from user_tables
3 where table_name = 'TEST'; TABLE_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE
------------------------------ ---------- ---------- ------------ ----------
TEST 87556 1328 0 0

2,表上列的统计信息

SQL> select table_name,column_name,num_distinct,density
2 from user_tab_columns
3 where table_name = 'TEST'; TABLE_NAME COLUMN_NAME NUM_DISTINCT DENSITY
------------------------------ ------------------------------ ------------ ----------
TEST OWNER 34 .023504483
TEST OBJECT_NAME 57495 .000020431
TEST SUBOBJECT_NAME 163 .007094837
TEST OBJECT_ID 87556 .000011421
TEST DATA_OBJECT_ID 22685 .000044786
TEST OBJECT_TYPE 45 .086650298
TEST CREATED 2057 .000847961
TEST LAST_DDL_TIME 1898 .000919514
TEST TIMESTAMP 2182 .000838526
TEST STATUS 1 5.7106E-06
TEST TEMPORARY 2 5.7106E-06 TABLE_NAME COLUMN_NAME NUM_DISTINCT DENSITY
------------------------------ ------------------------------ ------------ ----------
TEST GENERATED 2 5.7106E-06
TEST SECONDARY 2 5.7106E-06
TEST NAMESPACE 21 .116972867
TEST EDITION_NAME 0 0

3,表上列的直方图信息(OBJECT_ID列)

SQL> col TABLE_NAME format a20
SQL> col COLUMN_NAME format a40
SQL> select table_name,column_name,endpoint_number,endpoint_value
2 from user_tab_histograms
3 where table_name = 'TEST'
4 and column_name = 'OBJECT_ID'; TABLE_NAME COLUMN_NAME ENDPOINT_NUMBER ENDPOINT_VALUE
-------------------- ---------------------------------------- --------------- --------------
TEST OBJECT_ID 0 2
TEST OBJECT_ID 1 8921
TEST OBJECT_ID 2 17998
TEST OBJECT_ID 3 26754
TEST OBJECT_ID 4 35510
TEST OBJECT_ID 5 44266
TEST OBJECT_ID 6 53025
TEST OBJECT_ID 7 62172
TEST OBJECT_ID 8 71290
TEST OBJECT_ID 9 82232
TEST OBJECT_ID 10 91577

4,分区的统计信息

SQL> select partition_name,num_rows,blocks,empty_blocks,avg_space
2 from user_tab_partitions
3 where table_name = 'TEST'; PARTITION_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS AVG_SPACE
------------------------------ ---------- ---------- ------------ ----------
P1 9708 147 0 0
P2 9805 162 0 0
P3 10000 156 0 0
P4 58043 863 0 0

5,分区上列的统计信息

SQL> select column_name,num_distinct,density,num_nulls
2 from user_part_col_statistics
3 where table_name = 'TEST'
4 and partition_name = 'P1'; COLUMN_NAME NUM_DISTINCT DENSITY NUM_NULLS
---------------------------------------- ------------ ---------- ----------
OWNER 5 .000051504 0
OBJECT_NAME 7878 .000142267 0
SUBOBJECT_NAME 25 .00877193 9594
OBJECT_ID 9708 .000103008 0
DATA_OBJECT_ID 2074 .000560776 7597
OBJECT_TYPE 20 .080003882 0
CREATED 141 .011559584 0
LAST_DDL_TIME 213 .010730067 0
TIMESTAMP 182 .011371733 0
STATUS 1 .000051504 0
TEMPORARY 2 .000051504 0 COLUMN_NAME NUM_DISTINCT DENSITY NUM_NULLS
---------------------------------------- ------------ ---------- ----------
GENERATED 2 .000051504 0
SECONDARY 1 .000051504 0
NAMESPACE 8 .000051504 0
EDITION_NAME 0 0 9708

6,分区上列的直方图信息(OBJECT_ID列)

SQL> select column_name,bucket_number,endpoint_value
2 from user_part_histograms
3 where table_name = 'TEST'
4 and partition_name = 'P1'
5 and column_name = 'OBJECT_ID'; COLUMN_NAME BUCKET_NUMBER ENDPOINT_VALUE
---------------------------------------- ------------- --------------
OBJECT_ID 0 2
OBJECT_ID 1 1030
OBJECT_ID 2 2010
OBJECT_ID 3 2981
OBJECT_ID 4 3952
OBJECT_ID 5 4923
OBJECT_ID 6 5928
OBJECT_ID 7 6953
OBJECT_ID 8 7933
OBJECT_ID 9 8903
OBJECT_ID 10 9999 11 rows selected.

7,子分区的统计信息

SQL> select subpartition_name,num_rows,blocks,empty_blocks
2 from user_tab_subpartitions
3 where table_name = 'TEST'
4 and partition_name = 'P1'; SUBPARTITION_NAME NUM_ROWS BLOCKS EMPTY_BLOCKS
------------------------------ ---------- ---------- ------------
SYS_SUBP21 3314 48 0
SYS_SUBP22 3824 57 0
SYS_SUBP23 528 11 0
SYS_SUBP24 2042 31 0 SQL>

8,子分区上的列的统计信息

SQL> select column_name,num_distinct,density
2 from user_subpart_col_statistics
3 where table_name = 'TEST'
4 and subpartition_name = 'SYS_SUBP21'; COLUMN_NAME NUM_DISTINCT DENSITY
---------------------------------------- ------------ ----------
OWNER 3 .000150875
OBJECT_NAME 3314 .00030175
SUBOBJECT_NAME 1 .009615385
OBJECT_ID 3314 .00030175
DATA_OBJECT_ID 178 .005617978
OBJECT_TYPE 7 .000150875
CREATED 126 .017527186
LAST_DDL_TIME 148 .01653325
TIMESTAMP 134 .017483116
STATUS 1 .000150875
TEMPORARY 2 .000150875 COLUMN_NAME NUM_DISTINCT DENSITY
---------------------------------------- ------------ ----------
GENERATED 2 .000150875
SECONDARY 1 .000150875
NAMESPACE 5 .000150875
EDITION_NAME 0 0

9,子分区上的列的直方图信息

SQL> select column_name,bucket_number,endpoint_value
2 from user_subpart_histograms
3 where table_name = 'TEST'
4 and subpartition_name = 'SYS_SUBP21'
5 and column_name = 'OBJECT_ID'; COLUMN_NAME BUCKET_NUMBER ENDPOINT_VALUE
---------------------------------------- ------------- --------------
OBJECT_ID 0 100
OBJECT_ID 1 1764
OBJECT_ID 2 2429
OBJECT_ID 3 3088
OBJECT_ID 4 3752
OBJECT_ID 5 4309
OBJECT_ID 6 4640
OBJECT_ID 7 5828
OBJECT_ID 8 7278
OBJECT_ID 9 8912
OBJECT_ID 10 9998

我们对这个复合分区分析之后产生了上面这九种不同层次的统计信息。CBO想要得要一个高效的执行计划需要如此多的统计信息

Oracle 分区表的统计信息实例的更多相关文章

  1. Oracle 分区表 收集统计信息 参数granularity

    GRANULARITY Determines the granularity of statistics to collect. This value is only relevant for par ...

  2. oracle里的统计信息

    1 oracle里的统计信息 Oracle的统计信息是这样的一组数据,存储在数据字典,从多个维度描述了oracle数据库对象的详细信息,有6种类型 表的统计信息:记录数.表块的数量.平均行长度等 索引 ...

  3. Oracle性能优化之Oracle里的统计信息

    一.什么是统计信息 oracle数据库里的统计信息是如下的一组数据:他们存储在数据字典里,且从多个维度描述了oracle数据库数据对象的详细信息. oracle数据库里的统计信息主要分为以下6种情况: ...

  4. 基于Oracle的SQL优化(崔华著)-整理笔记-第5章“Oracle里的统计信息”

    第5章“Oracle里的统计信息” 详细介绍了Oracle数据库里与统计信息相关的各个方面的内容,包括 Oracle数据库中各种统计信息的分类.含义.收集和查看方法,以及如何在Oracle数据库里正确 ...

  5. Oracle中的统计信息

    一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...

  6. Oracle的自动统计信息不收集直方图的信息

    Oracle的自动统计信息不收集直方图的信息 在oracle9i中,默认的统计信息收集是不收集直方图信息的,也就是说默认的MOTHOD_OPT模式为FOR ALL COLUMNS SIZE 1 在10 ...

  7. Oracle之自动收集统计信息

    一.Oracle 11g 在Oracle的11g版本中提供了统计数据自动收集的功能.在部署安装11g Oracle软件过程中,其中有一个步骤便是提示是否启动这个功能(默认是启用这个功能). 在这里介绍 ...

  8. 关于Oracle开启自动收集统计信息的SPA测试

    主题:关于Oracle开启自动收集统计信息的SPA测试 环境:Oracle RAC 11.2.0.4(Primary + Standby) 需求:生产Primary库由于历史原因关闭了自动统计信息的收 ...

  9. Oracle重新获取统计信息以及SQLSERVER重建索引

    Oracle重新获取统计信息 exec dbms_stats.gather_schema_stats(ownname =>'LCoe739999',options => 'GATHER', ...

随机推荐

  1. IEnumerable和List有什么区别?

    如下.IList接口可以使用更多的方法.比如你看一个集合是否包含相应实体, IEnumerable不行,而 IList里有Contains,相应的实现了IList的可以添加,删除相应实体.而IEnum ...

  2. FusionCharts for Flex报错

    1.昨天,我新建了一个Flex项目,并将FusionCharts组件添加进去了,但是Flex应用程序还是报错 具体错误如下: 2.但是,Flex项目已经导入FusionCharts.swc

  3. Flex 4 不同主题下容器子元素的管理方法

    Flex 下,容器主要分两类:Spark容器, Halo容器. Spark容器 Halo容器 说明 numElements numChildern 容器的子元素数量. addElement( ) ad ...

  4. HTTP协议——学习资料小结

    嗯,这几天回头再次的学习Servlet的知识点,觉得HTTP协议的内容是相当重要的,现在虽然知道浏览器与应用程序的交互离不开它,但是怎么将信息从浏览器传输到服务器的这个知识点还是一个盲点.于是从网上找 ...

  5. DWR基本配置

    DWR——Direct Web Remoter Servlet 供给那些想要以一种简单的方式使用Ajax和XMLHttpRequest的开发者.它具有一套JavaScript功能集,它们把从HTML页 ...

  6. 学习练习 Oracle数据库小题 Students

  7. Java基础——左移和右移

    首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的. 左移位:<<,有符号的移位操作 左移操作 ...

  8. java学习之(接口)

    使用接口 接口不能用于创建实例,但接口可以用于声明引用类型变量.当使用接口来声明引用类型变量时,这个引用类型变量必须引用到其实现类的对象.除此之外,接口的主要用途就是被实现类实现.归纳起来,接口主要有 ...

  9. 开源项目:X265

    1 Windows下编译X265 具体的编译环境: Windows 7(64bit) + Visual Stdio 2010 + Cmake 3.4.3 + vsyasm-1.3.0-win64 a. ...

  10. docker1.12 安装pxc(Percona XtraDB Cluster )测试

    docker1.12 安装pxc(Percona XtraDB Cluster )测试