作者:倒骑毛驴笑看人生gnWC_659 | 来源:互联网 | 2014-07-09 16:02
analyze和dbms_stats函数的区别analyze和dbms_stats函数都是收集一些统计信息,如下:Sql代码selecttable_name,num_rows,blocks,avg_row_lenfromuser_tableswheretable_name'T'...
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
二、DBMS_STATS的缺点
不能Validate Structure
不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
三、对于oracle 9版本后面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息。