1、作用:Oracle分析表的作用:用来收集统计信息,为了使基于CBO的执行计划更加准确。
2、对数据表的分析,有两种方式:
A、analyze table
analyze table tablename compute statistics
Analyze index|cluster indexname estimate statistics;
analyze table tablename estimate statistics sample 20 percent;
B、分析整个用户或数据库,还可以采用工具包,可以并行分析Dbms_stats(8i以后提供的工具包)
dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);
dbms_stats.gather_table_stats(User,TableName,degree => 4,cascade => true);
这是对命令与工具包的一些总结
1)、对于分区表,建议使用DBMS_STATS,而不是使用Analyze语句。
a) 可以并行进行,对多个用户,多个Table
b) 可以得到整个分区表的数据和单个分区的数据。
c) 可以在不同级别上Compute Statistics:单个分区,子分区,全表,所有分区
d) 可以倒出统计信息
e) 可以用户自动收集统计信息
2)、DBMS_STATS的缺点
a) 不能Validate Structure
b) 不能收集CHAINED ROWS, 不能收集CLUSTER TABLE的信息,这两个仍旧需要使用Analyze语句。
c) DBMS_STATS 默认不对索引进行Analyze,因为默认Cascade是False,需要手工指定为True
3)、对于oracle 9里面的External Table,Analyze不能使用,只能使用DBMS_STATS来收集信息