① 搜集和刪除索引、表和簇的統計資訊
② 驗證表、索引和簇的結構
③ 評鑑表和簇和行遷移和行連結
針對analyze的搜集和刪除統計資訊功能而言
Oracle推薦使用DBMS_STATS包來代替analyze搜集最佳化資訊
DBMS_STATS可以並行的搜集資訊,可以搜集分區表的全域資訊
進一步來說,CBO只會使用DBMS_STATS包所統計出來的資訊
{ COMPUTE [ SYSTEM ] STATISTICS [for_clause]
| ESTIMATE [ SYSTEM ] STATISTICS [for_clause][SAMPLE integer { ROWS | PERCENT }]
| validation_clauses
| LIST CHAINED ROWS [ into_clause ]
| DELETE [ SYSTEM ] STATISTICS
} ;
注釋:
① INDEX index:對索引進行分析,分析的結果會放在USER_INDEXES, ALL_INDEXES,或 DBA_INDEXES中
② TABLE table:對錶進行分析,分析的結果會放在USER_TABLES, ALL_TABLES, and DBA_TABLES表中
分析表的限制:
不可以分析資料字典表
不可以分析擴充表,但可以用DBMS_STATS來實現這個目的
不可以分析暫存資料表
不可以計算或估計下欄欄位類型:
REFs, varrays, nested tables, LOBs , LONGs, or object types
③ CLUSTER cluster:對簇進行分析,分析的結果會放在ALL_CLUSTERS, USER_CLUSTERS and DBA_CLUSTERS
④ compute_statistics_clause
文法:COMPUTE [ SYSTEM ] STATISTICS [for_clause]
對分析對象進行精確的統計,然後把資訊儲存的資料字典中。可以選擇對錶或對欄位進行分析
computed和estimated這兩種方式的統計資料都被最佳化器用來影響sql的執行計畫
如果指定system選項就只統計系統產生的資訊
for_clause:
FOR TABLE:只統計表
FOR COLUMNS:只統計某個欄位
FOR ALL COLUMNS:統計所有欄位
FOR ALL INDEXED COLUMNS:統計索引的所有欄位
⑤ ESTIMATE [ SYSTEM ] STATISTICS [for_clause][SAMPLE integer { ROWS | PERCENT }]
只是對部分行做一個大概的統計。適用於大表
SAMPLE:指定具體統計多少行,如果忽略這個參數的話,oracle會預設為1064行
ROWS causes:行數 Oracle to sample integer rows of the table or cluster or integer entries from the index. The integer must be at least 1.
PERCENT causes:百分數