Oracle表的分類以及相關(guān)參數(shù)的詳解
更新時間:2013年05月31日 09:29:31 作者:
本篇文章是對Oracle中表的分類以及相關(guān)參數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
oracle中有如下幾種類型的表:
1、堆組織表(heap organized tables):常用的表類型,以堆的方式管理,當(dāng)增加數(shù)據(jù)時,將使用段中第一個適合數(shù)據(jù)大小的空閑空間;當(dāng)刪除數(shù)據(jù)時,留下的空間允許以后的DML操作重用。
2、索引組織表:表存儲在索引結(jié)構(gòu)中,利用行本身排序存儲。在堆中,數(shù)據(jù)可能被填到任何適合的地方,在索引組織表中,根據(jù)主關(guān)鍵字,以排序順序來存儲數(shù)據(jù)。
3、聚簇表:幾張表物理存儲在一塊,通常是同一個數(shù)據(jù)塊上。包含相同聚簇碼值的所有數(shù)據(jù)在物理上存儲在一起,數(shù)據(jù)"聚集"在聚簇碼周圍,聚簇碼用B*Tree索引構(gòu)建。
4、散列聚簇表:和聚簇表相似,但是不是用B*Tree索引聚簇碼定位數(shù)據(jù),散列聚簇把碼散列到簇中,來到達(dá)數(shù)據(jù)所在的數(shù)據(jù)庫塊。在散列聚簇中,數(shù)據(jù)就是索引(比喻的說法)。這適合用于經(jīng)常通過碼等式來讀取的數(shù)據(jù)。
5、嵌套表:OOP擴(kuò)展的一部分,由系統(tǒng)產(chǎn)生,以父子關(guān)系維持子表。
6、臨時表:存儲事務(wù)或會話中的臨時數(shù)據(jù),用以中間結(jié)果的計算,分配臨時段做為存儲區(qū)域。
7、對象表:根據(jù)對象類型創(chuàng)建,有特殊屬性并且和非對象表不關(guān)聯(lián)。
一張表最多有1000列;理論上一張表有無限多行;能有和列的排列一樣多的索引,且一次能夠使用32個;擁有表的數(shù)量沒有限制。
表的相關(guān)參數(shù)及術(shù)語
1)高水位標(biāo)記
高水位標(biāo)記開始在新創(chuàng)建的表的第一個塊上。隨著數(shù)據(jù)不斷放到表中,使用了更多的塊,從而高水標(biāo)記上升。如果刪除一些表中的行,高水標(biāo)記仍不下移。即count(*)100000行和delete全部行后count(*)所需時間一樣(全掃描情況下)。需要對表進(jìn)行重建。
2)自由列表(freelist)
在oracle中用來跟蹤高水標(biāo)記以下有空閑空間的塊對象。每個對象至少有一個freelist和它相關(guān)。當(dāng)塊被使用時,oracle將根據(jù)需要放置或取走freelist。只有一個對象在高水位標(biāo)記以下的塊才能在freelist上發(fā)現(xiàn)。保留在高水標(biāo)記以上的塊,只有freelist為空時才能被用到。此時oracle提高高水標(biāo)記并把這些塊增加到freelist中。用這種方式,oracle對一個對象推遲提高高水標(biāo)記,直到必須時才提高。一個對象可能不只有一個freelist,如果預(yù)料會有許多并行用戶對一個對象進(jìn)行大量的insert或update,配置多個freelist能夠提高整體性能(可能的代價就是增加存儲空間)。
3)pctfree和pctused
如果pctfree設(shè)置為10,那么塊在用完90%以前,都會使用freelist(都位于freelist中)。一旦達(dá)到90%,將從freelist中移除,直到塊上空閑空間超過60%以后再使用(再次進(jìn)入freelist中,當(dāng)pctuser為40時)。
A.當(dāng)pctfree設(shè)置過小,而經(jīng)常更新時,容易出現(xiàn)行遷移
B.高pctfree,低pctused---用于插入許多將要更新的數(shù)據(jù),并且更新經(jīng)常會增加行的大小,這樣插入后在塊上保留了許多空間(高pctfree),在塊返回到自由列表之前,塊必須幾乎是空的(低pctused)
C.低pctfree,高pctused---用于傾向于對表只使用insert或delete,或者如果要update,update也只是會使行變小。
4)initial,next和pctincrease
例如使用一個initial盤區(qū)為1MB,next盤區(qū)為2MB,pctincrease為50,可得到盤區(qū)應(yīng)該是:(1)1mb(2)2mb(2)3mb(2的150)(4)4.5mb(3的150%)。一般認(rèn)為這些參數(shù)是過時的,數(shù)據(jù)庫應(yīng)該使用局部管理并且盤區(qū)大小一致的表空間。在這種方式下,initial盤區(qū)總是等于next盤區(qū)的大小,并且不必使用pctincrease,使用pctincrease只會導(dǎo)致表空間產(chǎn)生碎片。在沒用局部管理表空間的情況下,建議總是設(shè)置initial=next和pctincrease等于zero,這樣可以模擬局部管理表空間的使用,為了避免碎片,所有在表空間中的對象應(yīng)該使用相同盤區(qū)的分配策略。
5)minextents和maxextents
設(shè)置控制對象對它自己分配的盤區(qū)數(shù)。minextents為初始分配盤區(qū)個數(shù)。
6)logging和nologging
nologging允許對這些對象執(zhí)行某些操作時不產(chǎn)生重做。它只影響一些特定的操作,例如開始創(chuàng)建對象或者使用sqlldr進(jìn)行直接路徑裝載或者insert /*+ append */ select類型的語句。
7)initrans和maxtrans
對象中的每一塊都有一個塊頭,塊頭的一部分是事務(wù)表,事務(wù)表中的條目描述哪一個事務(wù)塊上的行/元素被鎖定了。事務(wù)表的最初大小由對象的initrans設(shè)置確定,對于表,默認(rèn)為1(索引默認(rèn)為2),當(dāng)需要時,事務(wù)表可以動態(tài)地增加,大小最多到maxtrans(假定在快上有足夠的空閑空間),每一個分配的事務(wù)條目在塊頭上占用23字節(jié)的存儲空間。
1、堆組織表(heap organized tables):常用的表類型,以堆的方式管理,當(dāng)增加數(shù)據(jù)時,將使用段中第一個適合數(shù)據(jù)大小的空閑空間;當(dāng)刪除數(shù)據(jù)時,留下的空間允許以后的DML操作重用。
2、索引組織表:表存儲在索引結(jié)構(gòu)中,利用行本身排序存儲。在堆中,數(shù)據(jù)可能被填到任何適合的地方,在索引組織表中,根據(jù)主關(guān)鍵字,以排序順序來存儲數(shù)據(jù)。
3、聚簇表:幾張表物理存儲在一塊,通常是同一個數(shù)據(jù)塊上。包含相同聚簇碼值的所有數(shù)據(jù)在物理上存儲在一起,數(shù)據(jù)"聚集"在聚簇碼周圍,聚簇碼用B*Tree索引構(gòu)建。
4、散列聚簇表:和聚簇表相似,但是不是用B*Tree索引聚簇碼定位數(shù)據(jù),散列聚簇把碼散列到簇中,來到達(dá)數(shù)據(jù)所在的數(shù)據(jù)庫塊。在散列聚簇中,數(shù)據(jù)就是索引(比喻的說法)。這適合用于經(jīng)常通過碼等式來讀取的數(shù)據(jù)。
5、嵌套表:OOP擴(kuò)展的一部分,由系統(tǒng)產(chǎn)生,以父子關(guān)系維持子表。
6、臨時表:存儲事務(wù)或會話中的臨時數(shù)據(jù),用以中間結(jié)果的計算,分配臨時段做為存儲區(qū)域。
7、對象表:根據(jù)對象類型創(chuàng)建,有特殊屬性并且和非對象表不關(guān)聯(lián)。
一張表最多有1000列;理論上一張表有無限多行;能有和列的排列一樣多的索引,且一次能夠使用32個;擁有表的數(shù)量沒有限制。
表的相關(guān)參數(shù)及術(shù)語
1)高水位標(biāo)記
高水位標(biāo)記開始在新創(chuàng)建的表的第一個塊上。隨著數(shù)據(jù)不斷放到表中,使用了更多的塊,從而高水標(biāo)記上升。如果刪除一些表中的行,高水標(biāo)記仍不下移。即count(*)100000行和delete全部行后count(*)所需時間一樣(全掃描情況下)。需要對表進(jìn)行重建。
2)自由列表(freelist)
在oracle中用來跟蹤高水標(biāo)記以下有空閑空間的塊對象。每個對象至少有一個freelist和它相關(guān)。當(dāng)塊被使用時,oracle將根據(jù)需要放置或取走freelist。只有一個對象在高水位標(biāo)記以下的塊才能在freelist上發(fā)現(xiàn)。保留在高水標(biāo)記以上的塊,只有freelist為空時才能被用到。此時oracle提高高水標(biāo)記并把這些塊增加到freelist中。用這種方式,oracle對一個對象推遲提高高水標(biāo)記,直到必須時才提高。一個對象可能不只有一個freelist,如果預(yù)料會有許多并行用戶對一個對象進(jìn)行大量的insert或update,配置多個freelist能夠提高整體性能(可能的代價就是增加存儲空間)。
3)pctfree和pctused
如果pctfree設(shè)置為10,那么塊在用完90%以前,都會使用freelist(都位于freelist中)。一旦達(dá)到90%,將從freelist中移除,直到塊上空閑空間超過60%以后再使用(再次進(jìn)入freelist中,當(dāng)pctuser為40時)。
A.當(dāng)pctfree設(shè)置過小,而經(jīng)常更新時,容易出現(xiàn)行遷移
B.高pctfree,低pctused---用于插入許多將要更新的數(shù)據(jù),并且更新經(jīng)常會增加行的大小,這樣插入后在塊上保留了許多空間(高pctfree),在塊返回到自由列表之前,塊必須幾乎是空的(低pctused)
C.低pctfree,高pctused---用于傾向于對表只使用insert或delete,或者如果要update,update也只是會使行變小。
4)initial,next和pctincrease
例如使用一個initial盤區(qū)為1MB,next盤區(qū)為2MB,pctincrease為50,可得到盤區(qū)應(yīng)該是:(1)1mb(2)2mb(2)3mb(2的150)(4)4.5mb(3的150%)。一般認(rèn)為這些參數(shù)是過時的,數(shù)據(jù)庫應(yīng)該使用局部管理并且盤區(qū)大小一致的表空間。在這種方式下,initial盤區(qū)總是等于next盤區(qū)的大小,并且不必使用pctincrease,使用pctincrease只會導(dǎo)致表空間產(chǎn)生碎片。在沒用局部管理表空間的情況下,建議總是設(shè)置initial=next和pctincrease等于zero,這樣可以模擬局部管理表空間的使用,為了避免碎片,所有在表空間中的對象應(yīng)該使用相同盤區(qū)的分配策略。
5)minextents和maxextents
設(shè)置控制對象對它自己分配的盤區(qū)數(shù)。minextents為初始分配盤區(qū)個數(shù)。
6)logging和nologging
nologging允許對這些對象執(zhí)行某些操作時不產(chǎn)生重做。它只影響一些特定的操作,例如開始創(chuàng)建對象或者使用sqlldr進(jìn)行直接路徑裝載或者insert /*+ append */ select類型的語句。
7)initrans和maxtrans
對象中的每一塊都有一個塊頭,塊頭的一部分是事務(wù)表,事務(wù)表中的條目描述哪一個事務(wù)塊上的行/元素被鎖定了。事務(wù)表的最初大小由對象的initrans設(shè)置確定,對于表,默認(rèn)為1(索引默認(rèn)為2),當(dāng)需要時,事務(wù)表可以動態(tài)地增加,大小最多到maxtrans(假定在快上有足夠的空閑空間),每一個分配的事務(wù)條目在塊頭上占用23字節(jié)的存儲空間。
相關(guān)文章
Oracle數(shù)據(jù)創(chuàng)建虛擬列和復(fù)合觸發(fā)器的方法
Oracle的虛擬列解決了很多需要使用觸發(fā)器或者需要通過代碼進(jìn)行計算統(tǒng)計產(chǎn)生數(shù)據(jù)信息的問題,而復(fù)合觸發(fā)器實際上是作為一個整體定義的四個不同的觸發(fā)器來執(zhí)行操作,需要了解的朋友可以參考下2015-08-08Oracle數(shù)據(jù)泵的導(dǎo)入與導(dǎo)出實例詳解
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)泵的導(dǎo)入與導(dǎo)出的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11oracle數(shù)據(jù)庫導(dǎo)入導(dǎo)出命令解析
這篇文章主要介紹了oracle數(shù)據(jù)庫導(dǎo)入導(dǎo)出命令解析,小編覺得還是比較不錯的,需要的朋友可以參考下。2017-10-10Oracle查看表結(jié)構(gòu)的幾種方法示例代碼
本文通過示例代碼給大家介紹了oracle查看表結(jié)構(gòu)的幾種方式,感興趣的朋友參考下吧2017-07-07Windows Server 2012 安裝oracle11g(圖文教程)
這篇文章主要介紹了Windows Server 2012 安裝oracle11g(圖文教程),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Oracle9i的全文檢索技術(shù)開發(fā)者網(wǎng)絡(luò)Oracle
Oracle9i的全文檢索技術(shù)開發(fā)者網(wǎng)絡(luò)Oracle...2007-03-03