Oracle對錶、索引和簇的分析
分析Oracle的表、索引或簇,可以採集其有關的資料,或者校驗其儲存格式的合法性。還可以分析這些模式物件以便收集或更新指定物件的統計資料。當釋出DDL語句時,參照物件的統計資料被用於確定該語句的最有效的執行方案。即使用CBO就需要有足夠的分析資料。
一、使用表、索引、簇的統計表
使用ANALYZE語句來收集統計資訊到資料字典中。當使用CBO來執行SQL時,就會利用這些統計資料以得出結論。
COMPUTER STATISTICS
當計算統計數字時,掃描整個物件,收集關於此物件的資料。Oracle用這些資料來計算此物件的精確統計資料。在這些計算出的統計資料中,整個物件的微小變化都被計算出來。因為為了收集計算統計資料的資訊要掃描整個物件,所以物件的體積越大,收集所有資訊所要做的工作就越多。
ESTIMATE STATISTICS
當估計統計資料時,Oracle收集物件的各部分有代表性的資訊。該資訊的子集提供了有關該物件合理的、估計的統計資料。估計出的統計出具的精確度取決於Oracle所使用的樣例的代表性。因為收集估計統計資料只是掃描物件的幾個部分,因此能快速得分析一個物件,也可以隨意得指定Oracle在做估計時所使用的行的數量和百分比。
注意:在計算表或簇的統計資料時,需要有足夠的臨時空間。但分析索引時不需要臨時空間。
二、使用ANALYZE語句計算統計資料
ANALYZE TABLE emp COMPUTE STATISTICS; --完全統計
ANALYZE TABLE emp ESTIMATE STATISTICS; --預設的1064行統計樣例
ANALYZE TABLE emp ESTIMATE STATISTICS SAMPLE 2000 ROWS; --用2000行做統計樣例
ANALYZE TABLE emp ESTIMATE STATISTICS SAMPLE 33 PERCENT; --用33%做統計樣例
統計得到的資訊有以下這些(帶*號的表示資料是精確的)
表:
● 行數
● 已經使用的資料塊數*
● 從未使用的資料塊數
● 平均可用的空閒空間
● 連結行的數目
● 平均行長度
● 列中不同的值的數目
● 列的下限值*
● 列的上限值*
索引:
● 索引層次*
● 葉子資料塊的數目
● 不同的鍵的數目
● 每個鍵的葉子資料塊的平均數目
● 每個鍵的資料塊的平均數目
● 分簇因子
注意:若一個索引已標記為UNUSABLE,則在分析時報錯,必須刪除或重建後才能分析。
簇:
● 簇鍵鏈的平均長度
注:當分析簇的統計資料時,簇中的表盒索引的統計資訊會被自動收集
三、操作物件的統計資料
1、檢視統計資訊
DBA|ALL|USER_INDEXES
DBA|ALL|USER_TABLES
DBA|ALL|USER_TAB_COLUMNS
注意:這些表中的上面所列統計資訊,如果不ANALYZE的話,是一直不變的。
2、刪除統計資訊
ANALYZE TABLE emp DELETE STATISTICS;
刪除後可以防止table再使用CBO
3、其他的統計方法
使用PLSQL包也可以對錶進行資料統計分析
DBMS_STATS:這個當然是最強大的分析包了
DBMS_UTILITY.ANALYZE_SCHEMA:可直接分析SCHEMA中所有物件
DBMS_DDL.ANALYZE_OBJECT:收集物件的的統計資訊
四、校驗表、索引、簇和物化檢視
為了校驗表、索引、簇和物化檢視的結構的完整性,使用帶有VALIDATE STRUCTURE選項的ANALYZE語句,如果返回錯誤訊息,則說明該物件已損壞。如果物件損壞,則需要刪除並重建。如果是物化檢視,則僅需要重新完全重新整理一遍
校驗的語句如下:
ANALYZE TABLE emp VALIDATE STRUCTURE;
如果需要校驗與某物件有關聯的所有物件是否有效,則使用CASCADE子句:
ANALYZE TABLE emp VALIDATE STRUCTURE CASCADE;
再加入聯機結構校驗:
ANALYZE TABLE emp VALIDATE STRUCTURE CASCADE ONLINE;
五、列出表和簇的連結行
可使用LIST CHAINED ROWS選項的ANALYZE語句,檢視錶或簇中連結的或遷移的行。這條語句的執行結果儲存在制定的表中,該表被明確得建立,以便直接接收由LIST CHAINED ROWS子句返回的值。
1、建立CHAINED_ROWS表
建立用於接收由ANALYZE LIST CHAINED ROWS語句返回的資料的表,執行'D:\oracle\ora92\rdbms\admin\utlchain.sql'(這個指令碼其實就是一個簡單的table建立語句)。
建立之後,使用ANALYZE語句的語法如下:
ANALYZE CLUSTER emp_dept CHAINED ROWS INTO CHAINED_ROWS;
2、刪除表中的遷移或連結行
使用CHAINED_ROWS表中的資訊,可減少或刪除現存表中的遷移或連結行,步驟如下:
①使用ANALYZE語句收集遷移或連結行資訊
ANALYZE TABLE order_hist LIST CHAINED ROWS;
②查詢輸出表
SELECT * FROM CHAINED_ROWS WHERE TABLE_NAME = 'ORDER_HIST';
在輸出結果中會顯示遷移或者連結的所有行
③如果輸出表顯示出有許多遷移或連結行,則開始執行刪除遷移行:
④建立一個與現存表相同列的中間表,以便保留遷移或連結行
CREATE TABLE int_order_hist AS SELECT * FROM order_hist WHERE ROWID IN
(SELECT HEAR_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = 'ORDER_HIST');
⑤從現存的表中刪除遷移或連結行
DELETE FROM order_hist WHERE ROWID IN
(SELECT HEAR_ROWID FROM CHAINED_ROWS WHERE TABLE_NAME = 'ORDER_HIST');
⑥把中間表中的行插入到現存表中
INSERT INTO order_hist SELECT * FROM int_order_hist;
⑦刪除中間表
DROP TABLE int_order_hist;
⑧從輸出表中刪除步驟1所收集的資訊
DELETE FROM CHAINED_ROWS WHERE TABLE_NAME = 'ORDER_HIST';
⑨再次使用ANALYZE語句,查詢輸出表
⑩再次輸出表中的所有行都是連結行,通過增加資料塊大小就能消除連結行。但是很多情況下,連結問題不可避免。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23577591/viewspace-687599/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL中的聚簇索引和非聚簇索引MySql索引
- MySQL聚簇索引和非聚簇索引的原理及使用MySql索引
- MySQL 聚簇索引 和覆蓋索引MySql索引
- 一分鐘明白MySQL聚簇索引和非聚簇索引MySql索引
- 資料庫聚簇索引——not null條件對唯一鍵索引成為聚簇索引的影響資料庫索引Null
- 淺談聚簇索引與非聚簇索引索引
- 聚簇索引和非聚簇索引到底有什麼區別?索引
- Oracle對索引分析的優化Oracle索引優化
- 聚簇索引索引
- Oracle的簇與簇表Oracle
- 資料庫表,索引(索引組織表,聚簇表,聚簇索引,)資料庫索引
- oracle 表分析和索引Oracle索引
- 【索引】Oracle之不可見索引和虛擬索引的比對索引Oracle
- ORACLE分析表和索引的指令碼Oracle索引指令碼
- 一看就懂的MySQL的聚簇索引,以及聚簇索引是如何長高的MySql索引
- oracle中的簇Oracle
- 【Mysql】InnoDB 中的聚簇索引、二級索引、聯合索引MySql索引
- Oracle SQL對錶的操作OracleSQL
- Oracle對錶的監控Oracle
- 關於非簇索引中儲存的簇索引的RID還是指標的問題索引指標
- 理解索引和聚簇——效能調整手冊和參考索引
- oracle表對錶的多行更新Oracle
- 聊聊Mysql索引和redis跳錶MySql索引Redis
- oracle簇clusterOracle
- clustering factor索引聚簇因子和執行計劃索引
- oracle 索引分析及索引重建Oracle索引
- 【TUNE_ORACLE】檢視錶,列和索引的統計資訊SQL參考Oracle索引SQL
- ORACLE 索引和MYSQL INNODB 輔助索引對NULL的處理區別Oracle索引MySqlNull
- Oracle--02對錶的基本操作Oracle
- Oracle表與索引的分析及索引重建Oracle索引
- InnoDB學習(八)之 聚簇索引索引
- Oracle聚簇表Oracle
- Oracle表與索引的分析及索引重建(轉)Oracle索引
- oracle cluster(簇)的簡單使用Oracle
- 使用logminer來分析對錶所做的修改
- 索引的分析和比較索引
- 【實驗】【聚簇】聚簇(Cluster)和聚簇表(Cluster Table)的建立與總結
- mysql檢視錶建立的索引MySql索引