题目 部分

在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?

 

     答案部分

 

 

主要采用DBMS_STATS.GATHER_TABLE_STATS包进行统计信息的收集,如下所示:

1DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',CASCADE=>TRUE);--普通表
2DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',PARTNAME=>'PT_PART_NAME',GRANULARITY=>'PARTITION',CASCADE=>TRUE);--针对分区表的单个分区进行收集统计信息

除此之外,还有一些其它的用法,如下所示:

l EXEC DBMS_STATS.GATHER_DATABASE_STATS();--收集当前数据库下所有用户的统计信息

l EXEC DBMS_STATS.GATHER_SCHEMA_STATS(USER);--收集用户下所有对象的统计信息

当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢,在Oracle 11g之后可以通过设置INCREMENTAL来只针对数据有变动的分区做收集:

1EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TABLE_NAME','INCREMENTAL','TRUE');--只收集数据变动的分区
2SELECT DBMS_STATS.GET_PREFS('INCREMENTAL',NULL,'TABLE_NAME') FROM DUAL;--查看分区表INCREMENTAL的值

 

作者:小麦苗

 

【DB笔试面试630】在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?_oracle