dbms_stats.gather_table_stats和analyse的作用

自从Oracle8.1.5引入dbms_stats包,Experts们便推荐使用dbms_stats取代analyze。 理由如下


  dbms_stats可以并行分析


  dbms_stats有自动分析的功能(alter table monitor )


  analyze 分析统计信息的不准确some times


  1,2好理解,且第2点实际上在VLDB中是最吸引人的;3以前比较模糊,看了metalink236935.1 解释,analyze在分析Partition表的时候,有时候会计算出不准确的Global statistics .


  原因是,dbms_stats会实在的去分析表全局统计信息(当指定参数);而analyze是将表分区(局部)的statistics 汇总计算成表全局statistics ,可能导致误差。


  如果想分析整个用户或数据库,还可以采用工具包,可以并行分析


  Dbms_utility(8i以前的工具包)


  Dbms_stats(8i以后提供的工具包)


  如


  dbms_stats.gather_schema_stats(User,estimate_percent=>100,cascade=> TRUE);


  分区表推荐用:


  EXEC dbms_stats.gather_table_stats(ownname => 'SCHEMA',


  tabname => 'TABLE_NAME',


  cascade => TRUE,


  degree => number of cpu,


  estimate_percent => 100);


  一般的表(tom高效设计中的方法):


  analyze table table_name compute statistics for table for all indexes for all indexed columns;


  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来收集信息。

如果想了解更多相关的资料请关注(光纤激光打标机 www.szxiangnuo.com)官网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值