【DB筆試面試630】在Oracle中,怎樣收集表的統計資訊?怎樣收集分區表的統計資訊?
- 2019 年 10 月 10 日
- 筆記
♣
題目部分
在Oracle中,怎樣收集表的統計資訊?怎樣收集分區表的統計資訊?
♣
答案部分
主要採用DBMS_STATS.GATHER_TABLE_STATS包進行統計資訊的收集,如下所示:
DBMS_STATS.GATHER_TABLE_STATS(USER,'TB_NAME',CASCADE=>TRUE);--普通表 DBMS_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來只針對數據有變動的分區做收集:
EXEC DBMS_STATS.SET_TABLE_PREFS(USER,'TABLE_NAME','INCREMENTAL','TRUE');--只收集數據變動的分區 SELECT DBMS_STATS.GET_PREFS('INCREMENTAL',NULL,'TABLE_NAME') FROM DUAL;--查看分區表INCREMENTAL的值
本文選自《Oracle程式設計師面試筆試寶典》,作者:小麥苗