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