糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > 【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表

【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表

时间:2023-10-26 17:44:00

相关推荐

【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表

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

语法:

DBMS_STATS.GATHER_TABLE_STATS ( ownnameVARCHAR2, tabnameVARCHAR2, partname VARCHAR2, estimate_percent NUMBER, block_sampleBOOLEAN, method_opt VARCHAR2, degree NUMBER, granularityVARCHAR2, cascadeBOOLEAN,stattabVARCHAR2, statid VARCHAR2,statownVARCHAR2, no_invalidate BOOLEAN, force BOOLEAN );

列含义:

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:创建测试表

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

2.对表进行分析

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

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

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

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

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

5.删除统计信息

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

6.导入统计信息

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

7.验证

SYS@GOOD> SELECT num_rows,blocks,empty_blocks as empty, avg_space, chain_cnt, avg_row_len FROM dba_tables WHERE owner = 'SYS'2 AND table_name = 'T';NUM_ROWSBLOCKSEMPTY AVG_SPACE CHAIN_CNT AVG_ROW_LEN---------- ---------- ---------- ---------- ---------- -----------85265 121600098

如果觉得《【Oracle】DBMS_STATS.GATHER_TABLE_STATS分析表》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。