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. JQuery基础教程:事件(上)

    在页面加载后执行任务      之前我们已经知道了$(document).ready()是jQuery基于页面加载执行任务的一种主要方式,但是要知道原生的window.onload事件也可以实现相同的 ...

  2. IOS键盘的相关设置(UITextfield)

    一.键盘风格 UIKit框架支持8种风格键盘. typedef enum { UIKeyboardTypeDefault,                // 默认键盘:支持所有字符 UIKeyboa ...

  3. linux多线程

    #include <pthread.h> pthread_t pid; pthread_create(&pid, 0, pFunc, pArgs); //创建线程(linux下线程 ...

  4. 慕课网-安卓工程师初养成-1-5 使用Eclipse开发Java程序

    来源: http://www.imooc.com/video/1412 eclipse --- IDE 集成开发环境(IDE)是一类软件 将程序开发环境和程序调试环境集合在一起,提高开发效率 其他ID ...

  5. tornado框架之路一

    Web 服务器 每个页面都以 HTML 的形式传送到你的浏览器中,HTML 是一种浏览器用来描述页面内容和结构的语言.那些负责发送 HTML 到浏览器的应用称之为“Web 服务器”,会让你迷惑的是,这 ...

  6. Decks

    Now that we have Card objects, the next step is to define a class to represent decks. Since a deck i ...

  7. webview渲染流程

    文档标记说明 ################# 消息边界 +++++++++++++++++ 区域分隔 $$$$$$$$$$$$$$$$$ 线程边界 ~~~~~~~~~~~~~~~~~ 进程边界 - ...

  8. VC与JavaScript交互(一) --- 如何实现

    为什么要让VC与JavaScript交互? 1.有时候我们需要让自己的软件打开一个网页,来获取页面上的一些数据.这时,可以用mshtml解析HTML提取出数据,也可以向HTML文档动态写入我们准备好的 ...

  9. flask页面操作gpn接口

    https://wizardforcel.gitbooks.io/flask-extension-docs/content http://cabeza.cn/blog/2016/02/28/datat ...

  10. Arrays.asList(数组) 解说

    最近在用Arrays的asList()生成的List时,List元素的个数时而不正确. Java代码 一:Arrays.asList(数组)该方法是将数组转化为集合(该方法主要用于Object对象数组 ...