最近在學習Oracle的統計信息這一塊,收集統計信息的方法如下: DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, 所有者名字 tabname VARCHAR2, 表名 partname VARCHAR2 DEFAULT NULL, 要分析的分區名 ...
最近在學習Oracle的統計信息這一塊,收集統計信息的方法如下:
DBMS_STATS.GATHER_TABLE_STATS ( ownname VARCHAR2, ---所有者名字 tabname VARCHAR2, ---表名 partname VARCHAR2 DEFAULT NULL, ---要分析的分區名 estimate_percent NUMBER DEFAULT NULL, ---採樣的比例 block_sample BOOLEAN DEFAULT FALSE, ---是否塊分析 method_opt VARCHAR2 DEFAULT ‘FOR ALL COLUMNS SIZE 1’,---分析的方式 degree NUMBER DEFAULT NULL, ---分析的並行度 granularity VARCHAR2 DEFAULT ‘DEFAULT’, ---分析的粒度 cascade BOOLEAN DEFAULT FALSE, ---是否分析索引 stattab VARCHAR2 DEFAULT NULL, ---使用的性能表名 statid VARCHAR2 DEFAULT NULL, ---性能表標識 statown VARCHAR2 DEFAULT NULL, ---性能表所有者 no_invalidate BOOLEAN DEFAULT FALSE, ---是否驗證游標依存關係 force BOOLEAN DEFAULT FALSE); ---強制分析,即使鎖表本文主要對參數granularity進行了一下驗證,
granularity:數據分析的力度
--global ---全局
--partition ---只在分區級別做分析
--subpartition --只在子分區級別做分析
驗證步驟如下:
一、創建一個分區表並插入兩條數據,同時在欄位ID上創建索引 drop table test purge; create table test(id number) partition by range(id) (partition p1 values less than (5), partition p2 values less than (10) ) ; insert into test values(1); insert into test values(6); commit; create index ind_id on test(id); 二、收集表的統計信息 exec dbms_stats.gather_table_stats(user,'TEST',cascade=>true); 三、查詢表的統計信息 select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST'; 結果如下:








十四、再次查詢id=100的數據


十六、重新再次收集表的統計信息 exec dbms_stats.gather_table_stats(user,'TEST',cascade =>true); 十七、查詢表的統計信息以及索引的統計信息 select num_rows,blocks,last_analyzed from user_tables where table_name = 'TEST';


