Oracle表的分類以及相關參數的詳解
來源:互聯網
上載者:User
oracle中有如下幾種類型的表:
1、堆組織表(heap organized tables):常用的表類型,以堆的方式管理,當增加資料時,將使用段中第一個適合資料大小的空閑空間;當刪除資料時,留下的空間允許以後的DML操作重用。
2、索引組織表:表格儲存體在索引結構中,利用行本身排序儲存。在堆中,資料可能被填到任何適合的地方,在索引組織表中,根據主關鍵字,以排序次序來儲存資料。
3、聚簇表:幾張表實體儲存體在一塊,通常是同一個資料區塊上。包含相同聚簇碼值的所有資料在物理上儲存在一起,資料"聚集"在聚簇碼周圍,聚簇碼用B*Tree索引構建。
4、散列聚簇表:和聚簇表相似,但是不是用B*Tree索引聚簇碼定位元據,散列聚簇把碼散列到簇中,來到達資料所在的資料庫塊。在散列聚簇中,資料就是索引(比喻的說法)。這適合用於經常通過碼等式來讀取的資料。
5、巢狀表格:OOP擴充的一部分,由系統產生,以父子關係維持子表。
6、暫存資料表:儲存事務或會話中的臨時資料,用以中間結果的計算,分配臨時段做為儲存地區。
7、對象表:根據物件類型建立,有特殊屬性並且和非對象表不關聯。
一張表最多有1000列;理論上一張表有無限多行;能有和列的排列一樣多的索引,且一次能夠使用32個;擁有表的數量沒有限制。
表的相關參數及術語
1)高水位標記
高水位標記開始在新建立的表的第一個塊上。隨著資料不斷放到表中,使用了更多的塊,從而高水標記上升。如果刪除一些表中的行,高水標記仍不下移。即count(*)100000行和delete全部行後count(*)所需時間一樣(全掃描情況下)。需要對錶進行重建。
2)自由列表(freelist)
在oracle中用來跟蹤高水標記以下有空閑空間的塊對象。每個對象至少有一個freelist和它相關。當塊被使用時,oracle將根據需要放置或取走freelist。只有一個對象在高水位標記以下的塊才能在freelist上發現。保留在高水標記以上的塊,只有freelist為空白時才能被用到。此時oracle提高高水標記並把這些塊增加到freelist中。用這種方式,oracle對一個對象延遲提高高水標記,直到必須時才提高。一個對象可能不只有一個freelist,如果預料會有許多並行使用者對一個對象進行大量的insert或update,配置多個freelist能夠提高整體效能(可能的代價就是增加儲存空間)。
3)pctfree和pctused
如果pctfree設定為10,那麼塊在用完90%以前,都會使用freelist(都位於freelist中)。一旦達到90%,將從freelist中移除,直到塊上空閑空間超過60%以後再使用(再次進入freelist中,當pctuser為40時)。
A.當pctfree設定過小,而經常更新時,容易出現行遷移
B.高pctfree,低pctused---用於插入許多將要更新的資料,並且更新經常會增加行的大小,這樣插入後在塊上保留了許多空間(高pctfree),在塊返回到自由列表之前,塊必須幾乎是空的(低pctused)
C.低pctfree,高pctused---用於傾向於對錶只使用insert或delete,或者如果要update,update也只是會使行變小。
4)initial,next和pctincrease
例如使用一個initial盤區為1MB,next盤區為2MB,pctincrease為50,可得到盤區應該是:(1)1mb(2)2mb(2)3mb(2的150)(4)4.5mb(3的150%)。一般認為這些參數是過時的,資料庫應該使用局部管理並且盤區大小一致的資料表空間。在這種方式下,initial盤區總是等於next盤區的大小,並且不必使用pctincrease,使用pctincrease只會導致資料表空間產生片段。在沒用局部管理資料表空間的情況下,建議總是設定initial=next和pctincrease等於zero,這樣可以類比局部管理資料表空間的使用,為了避免片段,所有在資料表空間中的對象應該使用相同盤區的分配策略。
5)minextents和maxextents
設定控制對象對它自己分配的盤區數。minextents為初始分配盤區個數。
6)logging和nologging
nologging允許對這些對象執行某些操作時不產生重做。它隻影響一些特定的操作,例如開始建立對象或者使用sqlldr進行直接路徑裝載或者insert /*+ append */ select類型的語句。
7)initrans和maxtrans
對象中的每一塊都有一個塊頭,塊頭的一部分是事務表,事務表中的條目描述哪一個事務塊上的行/元素被鎖定了。事務表的最初大小由對象的initrans設定確定,對於表,預設為1(索引預設為2),當需要時,事務表可以動態地增加,大小最多到maxtrans(假定在快上有足夠的空閑空間),每一個分配的事務條目在塊頭上佔用23位元組的儲存空間。