analyze table 表名 compute statistics (sample 20%);
創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè),為客戶提供網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計開發(fā)服務(wù),多年建網(wǎng)站服務(wù)經(jīng)驗,各類網(wǎng)站都可以開發(fā),品牌網(wǎng)站建設(shè),公司官網(wǎng),公司展示網(wǎng)站,網(wǎng)站設(shè)計,建網(wǎng)站費用,建網(wǎng)站多少錢,價格優(yōu)惠,收費合理。
后面括號的是抽樣統(tǒng)計,是為了加快分析速度,也可以不用,做全表分析。
在Oracle 數(shù)據(jù)庫中,我們經(jīng)常需要去手工分析表和索引,還有某個模式下所有的表和索引等等。oracle 提供了兩種分析方法,分別是dbms_stats 包和analyze 命令。這些是我們在日常項目管理中的真實使用的方法,供參考。
在10g 中分析某一個用戶下所有的對象,如user_miki 用戶
Sql代碼 收藏代碼
sys.dbms_stats.gather_schema_stats(ownname = 'user_miki',estimate_percent = 30,method_opt = 'FOR ALL INDEXED COLUMNS SIZE AUTO',cascade = true,options = 'GATHER');
這是我在項目中分析一個用戶所有對象的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
(miki西游 @mikixiyou 文檔,原文鏈接: )
在10g 中分析某一個用戶下某一個表及其索引,如user_miki 用戶下info 表和它的索引
Sql代碼 收藏代碼
execute dbms_stats.gather_table_stats(ownname = 'user_miki',tabname = 'info',estimate_percent = 30,method_opt = 'for all indexed columns size auto');
這是我在項目中單獨分析一個用戶中一張表的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。
我們在google 時,還能看到使用analzye 命令分析表的方法。
Sql代碼 收藏代碼
analyze table table_name compute statistics;
這個會將索引和表一起分析;
Sql代碼 收藏代碼
analyze table table_name compute statistics for table;
這個僅分析表;
analyze table table_name compute statistics for all columns;
這個僅分析表,和上面所有的字段,生成柱形圖
analyze table table_name compute statistics for all indexed columns;
這個僅分析表,和上面所有建立索引的字段,生成柱形圖
在9i 中,我們常常使用analyze 方法,在10g 以后,就改為dbms_stats.gather_schema_stats 類似的包來分析數(shù)據(jù)庫對象了。
10g 的分析函數(shù)包比9i 的analyze 方法更靈活一些。
在10g 中,會有個系統(tǒng)的計劃任務(wù),每天10 點和周末兩天都自動分析新的數(shù)據(jù)庫對象和它認為統(tǒng)計信息已經(jīng)過期的數(shù)據(jù)庫對象。這個分析結(jié)果有時候不靠譜。
因此,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作為補充,設(shè)置一個計劃任務(wù)定期去分析業(yè)務(wù)用戶下所有數(shù)據(jù)庫對象。
Sql代碼 收藏代碼
variable job number;
begin
sys.dbms_job.submit(job = :job,
what = 'sys.dbms_stats.gather_schema_stats(ownname = ''USR_MIKI'',estimate_percent = 30,method_opt = ''FOR ALL INDEXED COLUMNS SIZE AUTO'',cascade = true,options = ''GATHER'');',
next_date = to_date('16-12-2012 00:56:24', 'dd-mm-yyyy hh24:mi:ss'),
interval = 'sysdate+7');
commit;
end;
/
例如,設(shè)置為每周六運行一次。
analyze table 表名 compute statistics
analyze index 索引ID compute statistics
如果想分析所有的表名和index名可以從視圖user_tables,user_indexes取得相關(guān)的信息,自動生成SQL命令
首先要了解為什么要進行表分析,表分析的結(jié)果被Oracle用于基于成本的優(yōu)化生成更好的查詢計劃。所以,一般發(fā)現(xiàn)如有個表的查詢性能比較差,或者原本有索引但是沒有走,那就可以考慮對表進行分析。
去這里看看??
數(shù)據(jù)結(jié)構(gòu)被稱為物理(存儲)的數(shù)據(jù)結(jié)構(gòu)在計算機中的表示(圖片)。它包括一個數(shù)據(jù)元素表示的關(guān)系的表示。
物理結(jié)構(gòu),也就是由Oracle數(shù)據(jù)庫所使用的操作系統(tǒng)的文件結(jié)構(gòu)。對于數(shù)據(jù)庫的物理結(jié)構(gòu)文件,不同版本的Oracle,不同的操作系統(tǒng)平臺上的數(shù)據(jù)庫文件存放的目錄結(jié)構(gòu)不同的物理結(jié)構(gòu)
其作用可分為三類:
數(shù)據(jù)日志文件的文件
控制文件
數(shù)據(jù)文件,數(shù)據(jù)文件,用于存儲數(shù)據(jù)庫中的數(shù)據(jù),如表,索引等。當讀取數(shù)據(jù)時,系統(tǒng)首先讀取的數(shù)據(jù)從數(shù)據(jù)庫文件,并存儲到數(shù)據(jù)緩沖器,SGA。
重做日志文件,重做日志文件
所有的記錄在數(shù)據(jù)庫中的信息。這是三種類型的文件,文件中最復雜的,而且要保證數(shù)據(jù)庫的安全性和數(shù)據(jù)庫的備份和恢復文件直接。
控制文件
控制文件是一個二進制文件,用來描述數(shù)據(jù)庫的物理結(jié)構(gòu),數(shù)據(jù)庫只需要一個控制文件,控制文件的內(nèi)容,包括:
同步需要恢復的數(shù)據(jù)文件和日志文件的信息標識數(shù)據(jù)庫和數(shù)據(jù)庫的名稱,唯一標識
數(shù)據(jù)庫,檢查點數(shù)量
/
a
如果有,請記得采納為滿意的答復,謝謝你!我祝你幸福的生活!
vaela
1。如果你的表經(jīng)常由幾千萬變成幾百萬,又變成幾千萬那么需要制定分析計劃定期表分析,同時可以一并分析索引,計算索引中數(shù)據(jù)的分布情況,這樣CBO會選擇更加準確的執(zhí)行計劃。
2。如果表結(jié)構(gòu)變化了也要做下,也就是經(jīng)常對表做dml就需要分析,現(xiàn)在推薦使用dbms_stats包。