天天看點

Oracle中分析表的作用

1.分析更新表的統計資訊,,有可能導緻執行計劃改變..

2.以的analyze table abc compute statistics;這條為例,生成的統計資訊會存在于user_tables這個視圖,檢視一下select * from user_tables where table_name='ABC';

觀察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN幾列你就會明白,這就是變化。分析完表之後,會發現DBA_tables 視圖中,以前很多列值是空的,現在開始有資料了。這些資料就是分析表得到的.

3.怎麼樣分析表或索引

指令行方式可以采用analyze指令

如Analyze table tablename compute statistics;

Analyze index|cluster indexname estimate statistics;

ANALYZE TABLE tablename COMPUTE STATISTICS

FOR TABLE

FOR ALL [LOCAL] INDEXES

FOR ALL [INDEXED] COLUMNS;

ANALYZE TABLE tablename DELETE STATISTICS

ANALYZE TABLE tablename VALIDATE REF UPDATE

ANALYZE TABLE tablename VALIDATE STRUCTURE

[CASCADE]|[INTO TableName]

ANALYZE TABLE tablename LIST CHAINED ROWS [INTO TableName]

等等。

如果想分析整個使用者或資料庫,還可以采用工具包,可以并行分析

Dbms_utility(8i以前的工具包)

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

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

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來收集資訊.

繼續閱讀