oracle hr账号默认analyze和dbms_stats函数的区别

analyze和dbms_stats函数的区别

 

analyze和dbms_stats函数都是收集一些统计信息,如下:

Sql代码  

select table_name, num_rows, blocks, avg_row_len  

  from user_tables  

 where table_name = 'T';  

   www.2cto.com  

 

Sql代码  

analyze table t compute statistics;  

 

 

Sql代码  

删除统计信息  

analyze table t delete statistics;  

 

用dbms_stats函数如下:

Sql代码  

SQL> exec dbms_stats.gather_table_stats(user,'T');  

 

得到的结果和analyze相同。

 

一般对于常规的使用(不考虑分区表,外部表等特性),使用Analyze可以帮助我们得到我们需要的数据。细微的区别如下:

 

一、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句

可以并行进行,对多个用户,多个Table

可以得到整个分区表的数据和单个分区的数据。

可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区

可以倒出统计信息

可以用户自动收集统计信息

  www.2cto.com &noracle账号bsp;

二、DBMS_STATS的缺点

不能Validate Structure

不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。

DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True

三、对于oracle 9版本后面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。

 

此条目发表在oracle metalink账号分类目录,贴了标签。将固定链接加入收藏夹。