表分析,简单的说,就是收集表和索引的信息,CBO根据这些信息决定SQL最佳的执行路径。通过对表的分析,可以产生一些统计信息,通过这些信息oracle的优化程序可以进行优化。
语法:

  1. DBMS_STATS.GATHER_TABLE_STATS (
  2. ownname VARCHAR2,
  3. tabname VARCHAR2,
  4. partname VARCHAR2,
  5. estimate_percent NUMBER,
  6. block_sample BOOLEAN,
  7. method_opt VARCHAR2,
  8. degree NUMBER,
  9. granularity VARCHAR2,
  10. cascade BOOLEAN,
  11. stattab VARCHAR2,
  12. statid VARCHAR2,
  13. statown VARCHAR2,
  14. no_invalidate BOOLEAN,
  15. force BOOLEAN
  16. );

列含义:
ownname #要分析表的拥有者
tabname #要分析表的表名
partname #分区的名字,只对分区表或者分区索引有用,默认为:null
estimate_percent#采样行的百分比,取值范围[0.000001,100],null是全部分析不采样,常量:DBMS_STATS.AUTO_SAMPLE_SIZE是默认值,由oracle决定最佳取采样值.
block_sample #是否用块采样代替行采样,默认为false
method_opt #method_opt:决定histograms信息是怎样被统计的,统计指定列的直方图时建议使用SKEWONLY
method_opt的取值如下:
for all columns:统计所有列的histograms.
for all indexed columns:统计所有indexed列的histograms.
for all hidden columns:统计你看不到列的histograms
for columns SIZE | REPEAT | AUTO | SKEWONLY
SKEWONLY:统计指定列的histograms.N的取值范围[1,254]
REPEAT上次统计过的histograms
AUTO由oracle决定N的大小
degree #决定并行度,默认为null
granularity #设置分区表收集统计信息的粒度 granularity取值:
all:对表达分区,分区,子分区的数据都做分析
auto:Oracle根据分区的类型,自行决定做哪一种粒 度的分析
global:只做全局级别非分析
global and partition:只对全局和分区级别做分析,对子分区不做分析,这是和all的一个区别
partition:只对分区级别做分析
subpartition:只对子分区做分析
cascade #是收集索引的信息.默认为falase
stattab #指定要存储统计信息的表,
statid #对存储在同一个stattab中的表的统计信息做区分
statown #存储统计信息 表的拥有者
no_invalidate #true:当收集完统计信息后,收集对象的cursor不会失效(不会产生新的执行计划,子游标);
false:当收集完统计信息后,收集对象的cursor会立即失效(新的执行计划,新的子游标)
force #即使表锁定了也收集统计信息

统计信息导入导出:
1:创建测试表

  1. SYS@GOOD> create table t as select * from all_objects;
  2. Table created.

2.对表进行分析

  1. SYS@GOOD> BEGIN
  2. 2 dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'T');
  3. 3 END;
  4. 4 /
  5. PL/SQL procedure successfully completed.

3.创建表,存放统计信息

  1. SYS@GOOD> BEGIN
  2. 2 dbms_stats.create_stat_table(ownname=>'SCOTT',stattab=>'STAT_TABLE');
  3. 3 END;
  4. 4 /
  5. PL/SQL procedure successfully completed.

4.导出统计信息到stat_table表中

  1. SYS@GOOD> begin
  2. 2 dbms_stats.export_table_stats(ownname=>'SYS',tabname=>'T',statown=>'SCOTT',stattab=>'STAT_TABLE');
  3. 3 end;
  4. 4 /
  5. PL/SQL procedure successfully completed.

5.删除统计信息

  1. SYS@GOOD> begin
  2. 2 dbms_stats.delete_table_stats(ownname=>'SYS',tabname=>'T');
  3. 3 end;
  4. 4 /
  5. PL/SQL procedure successfully completed.

6.导入统计信息

  1. SYS@GOOD> begin
  2. 2 dbms_stats.import_table_stats(ownname=>'SYS',tabname=>'T',statown=>'SCOTT',stattab=>'STAT_TABLE');
  3. 3 end;
  4. 4 /
  5. PL/SQL procedure successfully completed.

7.验证

  1. SYS@GOOD> SELECT num_rows,blocks,empty_blocks as empty, avg_space, chain_cnt, avg_row_len FROM dba_tables WHERE owner = 'SYS'
  2. 2 AND table_name = 'T';
  3. NUM_ROWS BLOCKS EMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN
  4. ---------- ---------- ---------- ---------- ---------- -----------
  5. 85265 1216 0 0 0 98

【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表的更多相关文章

  1. Oracle:DBMS_STATS.GATHER_TABLE_STATS的语法

    转自: http://cjjwzs.iteye.com/blog/1143893 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息. DBMS_STATS.G ...

  2. Oracle基础之分析表

    analyze table tablename compute statistics; analyze index indexname compute statistics; (analyze 不会重 ...

  3. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS详解

    由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要!    作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直 ...

  4. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS

    月初一直在忙保监会报送的事情,苦逼的保险行业的ETL大家都懂的.今天闲来无事查看了一下前阵子的报送存储过程,发现系统隔一段时间就会调用一次DBMS_STATS.GATHER_TABLE_STATS,所 ...

  5. 在Oracle 11.2.0.1.0下dbms_stats.gather_table_stats收集直方图不准

    SQL> select * from v$version; BANNER ------------------------------------------------------------ ...

  6. 【转】DBMS_STATS.GATHER_TABLE_STATS详解

    转自http://blog.itpub.net/26892340/viewspace-721935/ [作用] DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默 ...

  7. 【转】DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10

    [转]DBMS_STATS.GATHER_TABLE_STATS详解 2012-04-22 09:20:10 分类: Linux 由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至 ...

  8. dbms_stats.gather_table_stats与analyze table 的区别[转贴]

    Analyze StatementThe ANALYZE statement can be used to gather statistics for a specific table, index ...

  9. DBMS_STATS.GATHER_TABLE_STATS

    由于Oracle的优化器是CBO,所以对象的统计数据对执行计划的生成至关重要! 作用:DBMS_STATS.GATHER_TABLE_STATS统计表,列,索引的统计信息(默认参数下是对表进行直方图信 ...

随机推荐

  1. Got permission denied while trying to connect to the Docker daemon socket at unix

    拉取Dockerimages时错误信息如下: [master@localhost ~]$ docker pull redis Using default tag: latest Got permiss ...

  2. 解析python部分常用魔术方法

    def __add__(self, *args, **kwargs): # real signature unknown """ Return self+value. & ...

  3. 基于分布式框架 Jepsen 的 X-Cluster 正确性测试

    转自:https://mp.weixin.qq.com/s/iOe1VjG1CrHalr_I1PKdKw 原创 2017-08-27 严祥光(祥光) 阿里巴巴数据库技术 1 概述 AliSQL X-C ...

  4. (C/C++学习)3.C++中cin的成员函数(cin.get();cin.getine()……)

    说明:流输入运算符,在一定程度上为C++程序的开发提供了很多便利,我们可以避免C语言那种繁琐的输入格式,比如在输入一个数值时,还需指定其格式,而cin以及cout则不需要.但是cin也有一些缺陷,比如 ...

  5. 洛谷P1426 小鱼会有危险吗【水题模拟】

    有一次,小鱼要从A处沿直线往右边游,小鱼第一秒可以游7米,从第二秒开始每秒游的距离只有前一秒的98%.有个极其邪恶的猎人在距离A处右边s米的地方,安装了一个隐蔽的探测器,探测器左右x米之内是探测范围. ...

  6. Deepin & ROMS 安装详细流程

    按照这个过程,完美安装,当然并不能排除会出现其他的问题.如果遇到了,那就老老实实上网搜吧.

  7. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  8. Problem 22

    Problem 22 Using names.txt (https://projecteuler.net/problem=22)(right click and 'Save Link/Target A ...

  9. 使用idea搭建maven项目时 java目录下的xml文件没有加载的解决方法

    今天在idea集成开发环境下 使用maven搭建了ssm项目,遇到了3个问题 首先我们先复习一下知识点: 第一步:在web.xml中配置spring监听器 <!-- spring监听器 加载sp ...

  10. Drop a database in MongoDB

    http://www.linuxask.com/questions/drop-a-database-in-mongodb Drop a database in MongoDB Answer: Assu ...