欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

oracle中如何分析表,oracle對(duì)表進(jìn)行統(tǒng)計(jì)分析

如何在ORACLE系統(tǒng)中對(duì)表進(jìn)行統(tǒng)計(jì)分析

begin

創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),湖州網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:湖州等地區(qū)。湖州做網(wǎng)站價(jià)格咨詢:18980820575

dbms_stats.gather_table_stats( ownname='XXXX',tabname = 'XXXX' ,ESTIMATE_PERCENT=100,degree=8, CASCADE=true);

end;

如何分析oracle數(shù)據(jù)庫(kù)中的表結(jié)構(gòu)?

去這里看看??

數(shù)據(jù)結(jié)構(gòu)被稱為物理(存儲(chǔ))的數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)中的表示(圖片)。它包括一個(gè)數(shù)據(jù)元素表示的關(guān)系的表示。

物理結(jié)構(gòu),也就是由Oracle數(shù)據(jù)庫(kù)所使用的操作系統(tǒng)的文件結(jié)構(gòu)。對(duì)于數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)文件,不同版本的Oracle,不同的操作系統(tǒng)平臺(tái)上的數(shù)據(jù)庫(kù)文件存放的目錄結(jié)構(gòu)不同的物理結(jié)構(gòu)

其作用可分為三類:

數(shù)據(jù)日志文件的文件

控制文件

數(shù)據(jù)文件,數(shù)據(jù)文件,用于存儲(chǔ)數(shù)據(jù)庫(kù)中的數(shù)據(jù),如表,索引等。當(dāng)讀取數(shù)據(jù)時(shí),系統(tǒng)首先讀取的數(shù)據(jù)從數(shù)據(jù)庫(kù)文件,并存儲(chǔ)到數(shù)據(jù)緩沖器,SGA。

重做日志文件,重做日志文件

所有的記錄在數(shù)據(jù)庫(kù)中的信息。這是三種類型的文件,文件中最復(fù)雜的,而且要保證數(shù)據(jù)庫(kù)的安全性和數(shù)據(jù)庫(kù)的備份和恢復(fù)文件直接。

控制文件

控制文件是一個(gè)二進(jìn)制文件,用來描述數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),數(shù)據(jù)庫(kù)只需要一個(gè)控制文件,控制文件的內(nèi)容,包括:

同步需要恢復(fù)的數(shù)據(jù)文件和日志文件的信息標(biāo)識(shí)數(shù)據(jù)庫(kù)和數(shù)據(jù)庫(kù)的名稱,唯一標(biāo)識(shí)

數(shù)據(jù)庫(kù),檢查點(diǎn)數(shù)量

/

a

如果有,請(qǐng)記得采納為滿意的答復(fù),謝謝你!我祝你幸福的生活!

vaela

Oracle數(shù)據(jù)庫(kù)表做表分析、索引分析的命令是什么?

analyze table 表名 compute statistics

analyze index 索引ID compute statistics

如果想分析所有的表名和index名可以從視圖user_tables,user_indexes取得相關(guān)的信息,自動(dòng)生成SQL命令

如何分析Oracle

以oracle表分析為例:

drop table test;

select count(*) from test;

--創(chuàng)建測(cè)試表

create table test

(

id number(9),

nick varchar2(30)

);

--插入測(cè)試數(shù)據(jù)

begin

for i in 1..100000 loop

insert into test(id) values(i);

end loop;

commit;

end;

select * from test;

--更新nick字段,使數(shù)據(jù)發(fā)生嚴(yán)重傾斜

update test set nick='abc' where rownum99999;

--創(chuàng)建索引

create index idx_test_nick on test(nick);

update test set nick='def' where nick is null;

--只對(duì)索引進(jìn)行分析

analyze index idx_test_nick compute statistics;

select * from user_indexes;

--查看索引名,對(duì)應(yīng)存儲(chǔ)的數(shù)據(jù)塊,不同的key數(shù)量,記錄數(shù)(行數(shù))的分析信息

select index_name, LEAF_BLOCKS, DISTINCT_KEYS, NUM_ROWS

from user_indexes

where index_name = 'IDX_TEST_NICK';

--dba_tab_col_statistics

--查看表的統(tǒng)計(jì)信息

select COLUMN_NAME, NUM_BUCKETS, num_distinct

from USER_tab_columns

where table_name = 'TEST';

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

select * from test where nick ='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

--由上可以看到,對(duì)索引分析之后,sql的執(zhí)行路徑都是基于規(guī)則的,索引的字段的偏移

--先根據(jù)索引找到rowid,然后再根據(jù)rowid讀取記錄,這個(gè)過程肯定比全表掃描讀取記錄要慢

--user_part_col_statistics 分區(qū)分析信息

--分析表的第二列nick

analyze table test compute statistics for columns size 2 nick;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST'

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE)

--根據(jù)上面的執(zhí)行計(jì)劃,還是按照規(guī)則來執(zhí)行的

--分析表

analyze table test compute statistics for table;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=

1499970)

1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=49 Card=99998 Bytes=14

99970)

--分析表之后,完全按照成本來執(zhí)行

--刪除所有的統(tǒng)計(jì)數(shù)據(jù),并只對(duì)表與列進(jìn)行分析,不分析索引,

--ORACLE使用CBO的優(yōu)化器,并產(chǎn)生了正確的執(zhí)行計(jì)劃

analyze table test delete statistics;

--分析列nick

analyze table test compute statistics for table for columns size 2 nick;

select * from test where nick ='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=49 Card=99998 Bytes=

1499970)

1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=49 Card=99998 Bytes=14

99970)

--

select * from test where nick ='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=2 Bytes=30)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=2 Byt

es=30)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

--創(chuàng)建TEST表ID列上的索引,但不對(duì)索引進(jìn)行分析

create index idx_test_id on test(id);

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15

000)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000

Bytes=15000)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=400)

--當(dāng)條件中即有id,又有nick時(shí),因?yàn)閚ick上有直方圖,ORACLE知道nick='abc'的值特別的多,所以不走IDX_TEST_NICK索引,走IDX_TEST_ID上的索引

select * from test where id=5 and nick='abc';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1000 Bytes=15

000)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1000

Bytes=15000)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=400)

--當(dāng)條件中即有id,又有nick時(shí),因?yàn)閚ick上有直方圖,ORACLE知道nick='def'的值特別的少,所以走IDX_TEST_NICK上的索引,不走IDX_TEST_ID索引

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

select * from test where nick='def' and id=5;

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_NICK' (NON-UNIQUE) (Cost

=1 Card=2)

--在分析ID列后,ORACLE發(fā)現(xiàn)ID列的選擇度更高,所以不再選擇IDX_TEST_NICK索引,而是選擇IDX_TEST_ID

analyze table test compute statistics for columns size 1 id;

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=7)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=7)

2 1 INDEX (RANGE SCAN) OF 'IDX_TEST_ID' (NON-UNIQUE) (Cost=1

Card=1)

/*

下面來看另外一種情況,我們刪除所有的統(tǒng)計(jì)數(shù)據(jù),然后在ID列上創(chuàng)建唯一索引,在此條件下,

只分析表與分析列nick,我們看到ORACLE走了正確的執(zhí)行計(jì)劃,

走了UK_TEST_ID,其實(shí)從這里也給我們帶來很多的啟示:

在主鍵與唯一鍵約束的列上是否需要直方圖的問題?

如果在這些列上有像這樣的查詢where id 100 and id 1000,

我們還是需要有直方圖的,但除此之外,好像真的沒有直方圖的必要了!

*/

analyze table test delete statistics;

drop index idx_test_id;

create unique index uk_test_id on test(id);

--分析表的第二列nick

analyze table test compute statistics for table for columns size 2 nick;

select * from test where id=5 and nick='def';

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=15)

1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST' (Cost=2 Card=1 Byt

es=15)

2 1 INDEX (UNIQUE SCAN) OF 'UK_TEST_ID' (UNIQUE) (Cost=1 Car

d=100000)

從以上一系列的實(shí)驗(yàn)可以看出,對(duì)ORACLE的優(yōu)化器CBO來說,表的分析與列的分析才是最重要的,索引的分析次之。還有我們可以考慮我們的哪些列上需要直方圖,對(duì)于bucket的個(gè)數(shù)問題,oracle的默認(rèn)值是75個(gè),所以根據(jù)你的應(yīng)用規(guī)則,選擇合適的桶數(shù)對(duì)性能也是有幫助的。因?yàn)椴槐匾耐暗膫€(gè)數(shù)的大量增加,必然會(huì)帶來SQL語句硬解析時(shí)產(chǎn)生執(zhí)行計(jì)劃的復(fù)雜度問題。

如何正確地分析Oracle數(shù)據(jù)庫(kù)模式,表及索引

在Oracle 數(shù)據(jù)庫(kù)中,我們經(jīng)常需要去手工分析表和索引,還有某個(gè)模式下所有的表和索引等等。oracle 提供了兩種分析方法,分別是dbms_stats 包和analyze 命令。這些是我們?cè)谌粘m?xiàng)目管理中的真實(shí)使用的方法,供參考。

在10g 中分析某一個(gè)用戶下所有的對(duì)象,如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');

這是我在項(xiàng)目中分析一個(gè)用戶所有對(duì)象的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。

(miki西游 @mikixiyou 文檔,原文鏈接: )

在10g 中分析某一個(gè)用戶下某一個(gè)表及其索引,如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');

這是我在項(xiàng)目中單獨(dú)分析一個(gè)用戶中一張表的分析方法,取樣比例為30% ,分析所有索引字段,生成柱形圖,并且也分析索引。

我們?cè)趃oogle 時(shí),還能看到使用analzye 命令分析表的方法。

Sql代碼 收藏代碼

analyze table table_name compute statistics;

這個(gè)會(huì)將索引和表一起分析;

Sql代碼 收藏代碼

analyze table table_name compute statistics for table;

這個(gè)僅分析表;

analyze table table_name compute statistics for all columns;

這個(gè)僅分析表,和上面所有的字段,生成柱形圖

analyze table table_name compute statistics for all indexed columns;

這個(gè)僅分析表,和上面所有建立索引的字段,生成柱形圖

在9i 中,我們常常使用analyze 方法,在10g 以后,就改為dbms_stats.gather_schema_stats 類似的包來分析數(shù)據(jù)庫(kù)對(duì)象了。

10g 的分析函數(shù)包比9i 的analyze 方法更靈活一些。

在10g 中,會(huì)有個(gè)系統(tǒng)的計(jì)劃任務(wù),每天10 點(diǎn)和周末兩天都自動(dòng)分析新的數(shù)據(jù)庫(kù)對(duì)象和它認(rèn)為統(tǒng)計(jì)信息已經(jīng)過期的數(shù)據(jù)庫(kù)對(duì)象。這個(gè)分析結(jié)果有時(shí)候不靠譜。

因此,我都采用10g 中提供的dbms_stats.gather_schema_stats 方法作為補(bǔ)充,設(shè)置一個(gè)計(jì)劃任務(wù)定期去分析業(yè)務(wù)用戶下所有數(shù)據(jù)庫(kù)對(duì)象。

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è)置為每周六運(yùn)行一次。

本文名稱:oracle中如何分析表,oracle對(duì)表進(jìn)行統(tǒng)計(jì)分析
轉(zhuǎn)載來源:http://chinadenli.net/article14/heoege.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站網(wǎng)站設(shè)計(jì)公司網(wǎng)站制作手機(jī)網(wǎng)站建設(shè)網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)