bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

oracle怎么分析表 oracle 分析表

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

去這里看看??

創(chuàng)新互聯(lián)建站是一家專業(yè)提供懷安企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站設(shè)計、成都做網(wǎng)站成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為懷安眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進行中。

數(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ù),如表,索引等。當(dāng)讀取數(shù)據(jù)時,系統(tǒng)首先讀取的數(shù)據(jù)從數(shù)據(jù)庫文件,并存儲到數(shù)據(jù)緩沖器,SGA。

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

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

控制文件

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

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

數(shù)據(jù)庫,檢查點數(shù)量

/

a

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

vaela

如何分析Oracle

以oracle表分析為例:

drop table test;

select count(*) from test;

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

create table test

(

id number(9),

nick varchar2(30)

);

--插入測試數(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;

--只對索引進行分析

analyze index idx_test_nick compute statistics;

select * from user_indexes;

--查看索引名,對應(yīng)存儲的數(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)計信息

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)

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

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

--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í)行計劃,還是按照規(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)計數(shù)據(jù),并只對表與列進行分析,不分析索引,

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

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列上的索引,但不對索引進行分析

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時,因為nick上有直方圖,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時,因為nick上有直方圖,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)計數(shù)據(jù),然后在ID列上創(chuàng)建唯一索引,在此條件下,

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

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

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

如果在這些列上有像這樣的查詢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)

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

oracle分析表有什么用

Oracle中分析表的作用

1.分析更新表的統(tǒng)計信息,,有可能導(dǎo)致執(zhí)行計劃改變..

2.以的analyze

table

abc

compute

statistics;這條為例,生成的統(tǒng)計信息會存在于user_tables這個視圖,查看一下select

*

from

user_tables

where

table_name='ABC';

觀察一下NUM_ROWS,BLOCKS,AVG_SPACE,AVG_ROW_LEN幾列你就會明白,這就是變化。分析完表之后,會發(fā)現(xiàn)DBA_tables

視圖中,以前很多列值是空的,現(xiàn)在開始有數(shù)據(jù)了。這些數(shù)據(jù)就是分析表得到的.

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]

等等。

如果想分析整個用戶或數(shù)據(jù)庫,還可以采用工具包,可以并行分析

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);

這是對命令與工具包的一些總結(jié)

(1)、對于分區(qū)表,建議使用DBMS_STATS,而不是使用Analyze語句。

a)

可以并行進行,對多個用戶,多個Table

b)

可以得到整個分區(qū)表的數(shù)據(jù)和單個分區(qū)的數(shù)據(jù)。

c)

可以在不同級別上Compute

Statistics:單個分區(qū),子分區(qū),全表,所有分區(qū)

d)

可以倒出統(tǒng)計信息

e)

可以用戶自動收集統(tǒng)計信息

(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來收集信息.

分享文章:oracle怎么分析表 oracle 分析表
標(biāo)題路徑:http://vcdvsql.cn/article2/hhpcoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化外貿(mào)建站云服務(wù)器電子商務(wù)全網(wǎng)營銷推廣動態(tài)網(wǎng)站

廣告

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

商城網(wǎng)站建設(shè)