DBMS_STATS.GATHER_TABLE_STATS(‘模式名’, ‘表名’,null,100,TRUE,‘FOR ALL COLUMNS SIZE AUTO’);
stat 100 ON 模式名.表名 ;
SP_TAB_STAT_INIT('模式','表名');
上面三种写法,彼此之间到底有什么区别,收集的信息都是一样的么?是否有效率上的差别,单线程,多线程的差别?
DBMS_STATS.GATHER_TABLE_STATS这个有个参数DEGREE,并行度。默认是1,我如果设置8的话,这个并行度指的是会有8个线程来一起收集这张表的统计信息么?从而原先这张大表要20分钟收集完,现在可以10分钟收集完?
看文档说明:
1、GATHER_TABLE_STATS,收集表、表中的列和表上的索引的统计信息。
2、SP_TAB_STAT_INIT,文档只说对某张表生成统计信息,这统计信息跟上面的包统计收集函数收集的信息有差异么?
DBMS_STATS.GATHER_TABLE_STATS可配置参数,比较灵活,stat 100 ON和SP_TAB_STAT_INIT是基于DBMS_STATS.GATHER_TABLE_STATS进行封装的。设置DBMS_STATS.GATHER_TABLE_STATS的DEGREE参数,可以开启并行收集统计信息,加快收集速度。