談一下如何設計Oracle 分割槽表

2021-06-22 00:21:18 字數 3805 閱讀 9587

在談設計oracle分割槽表之間先區分一下分割槽表和表空間的個概念:

表空間:表空間是乙個或多個資料檔案的集合,所有資料物件都存放在指定的表空間中,但主要存放表,故稱表空間。

分割槽表:分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片(piece)的方法。一旦分割槽被定義,sql語句就可以訪問的操作某乙個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。當表中的資料量不斷增大,查詢資料的速度就會變慢,應用程式的效能就會下降,這時就應該考慮對錶進行分割槽。表進行分割槽後,邏輯上表仍然是一張完整的表,只是將表中的資料在物理上存放到多個表空間(物理檔案上),這樣查詢資料時,不至於每次都掃瞄整張表。

表分割槽的具體作用:

oracle的分割槽表功能通過改善可管理性、效能和可用性,從而為各式應用程式帶來了極大的好處。

通常,分割槽可以使某些查詢以及維護操作的效能大大提高。此外,分割槽還可以極大簡化常見的管理任務,分割槽是構建千兆位元組資料系統或超高可用性系統的關鍵工具。

分割槽功能能夠將表、索引或索引組織表進一步細分為段,這些資料庫物件的段叫做分割槽。每個分割槽有自己的名稱,還可以選擇自己的儲存特性。從資料庫管理員的角度來看,乙個分割槽後的物件具有多個段,這些段既可進行集體管理,也可單獨管理,這就使資料庫管理員在管理分割槽後的物件時有相當大的靈活性。但是,從應用程式的角度來看,分割槽後的表與非分割槽表完全相同,使用 sql dml 命令訪問分割槽後的表時,無需任何修改。

在什麼時候使用分割槽表呢? 1

、表的大小超過

2gb。 2

、表中包含歷史資料,新的資料被增加都新的分割槽中。

表分割槽的優缺點:

優點:1、改善查詢效能:對分割槽物件的查詢可以僅搜尋自己關心的分割槽,提高檢索速度。

2、增強可用性:如果表的某個分割槽出現故障,表在其他分割槽的資料仍然可用;

3、維護方便:如果表的某個分割槽出現故障,需要修復資料,只修復該分割槽即可;

4、均衡i/o:可以把不同的分割槽對映到磁碟以平衡i/o,改善整個系統效能。

缺點:

2、分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片(piece)的方法。

分割槽表的分類 

1、range partitioning(範圍分割槽) 

2、hash partitioning(雜湊分割槽) 

3、list partitioning(列表分割槽) 

4、composite range-hash partitioning(範圍-雜湊組合分割槽) 

5、 composite range-list partitioning(範圍-列表組合分割槽)

何時選擇範圍分割槽

必須可以將表的記錄按照某一列值的範圍進行劃分。你想處理一些資料,這些資料經常是屬於某乙個範圍內,例如月份。如果資料能夠按照分割槽的範圍均勻分布的話,那會獲得最佳效能。如果資料分布很不均勻的話,你可能不得不選擇其他分割槽方式。

create table sales 

( invoice_no number,

sale_year int not null,

sale_month int not null,

sale_day int not null )

partition by range (sale_year, sale_month, sale_day)

( partition sales_q1 values less than (

1999, 04, 01

) tablespace tsa,

partition sales_q2 values less than (

1999, 07, 01

) tablespace tsb,

partition sales_q3 values less than (

1999, 10, 01

) tablespace tsc,

partition sales_q4 values less than (

2000, 01, 01

) tablespace tsd );

何時選擇hash分割槽

如果資料不容易用範圍分割槽,但你想提公升效能和表的易管理性。 hash分割槽提供了乙個在指定數量的分區內交叉均勻分布資料的方法。行根據分割槽鍵的hash值對映到相應分割槽中。建立和使用hash分割槽你可以靈活放置資料,可以通過交叉訪問在不同i/o裝置上的分割槽提公升效能。

create table scubagear (id number, name varchar2 (60

)) partition by hash (id)

partitions

4 store in (gear1, gear2, gear3, gear4);

何時選擇列表分割槽

使用list分割槽你可以直接控制某些資料對映到某些分割槽。你可以為某個分割槽指定不連續的分割槽鍵值。這不同於range分割槽(用鍵值的範圍劃分分割槽),也不同於hash分割槽(不能控制某行對映到哪個分割槽)。

create table q1_sales_by_region 

(deptno number, deptname varchar2(

20), quarterly_sales number(10, 2), state varchar2(2

)) partition by list (state)

(partition q1_northwest values ('or

', 'wa'

), partition q1_southwest values ('az

', '

ut', 'nm'

), partition q1_northeast values ('ny

', '

vm', 'nj'

), partition q1_southeast values ('fl

', 'ga'

), partition q1_northcentral values ('sd

', 'wi'

), partition q1_southcentral values ('ok

', '

tx'));

分割槽表的設計

如何選擇分割槽的型別,如何選擇分割槽的列呢?在這之前你必須明確你的目的——易管理性和效能,你更注重哪個方面?分割槽表所影響的方面可以歸類為以下幾種:效能、易管理性、資料清理。 

下面分別說說分割槽表對每一項的具體影響, 

效能:這一般是分割槽的主要目的。分割槽將大表變成了小表,當where之後的條件體現分割槽欄位的具體值時,避免了全表掃瞄。 

易於管理:

對於包含海量資料的大表,分割槽帶來的易於管理性是非常明顯的。當你建議乙個基於非分割槽表的索引時,唯一的選擇就是建立整個索引。如果表被分割槽,你就可以根據分割槽並行為此表建立索引,例如:

alter index par_ind_01 reuild partition yy05;
除此之外你還可以同時的做很多事情,像改變表所在表空間、匯出表,刪除表資料等等。

刪除資料:

我們經常會需要刪除表的一些歷史資料,一般做法是delete,但是這會導致undo和redo的資訊快速增長,而且影響資料庫整體效能。這時我們就可以利用drop某個分割槽來完成此任務,例如:

alter table tab_a drop partition yy01;
當乙個表的分割槽被刪除,對應的local索引也同時被刪除。如果還存在著global索引,那麼它會變成unusable狀態。為了避免此事情的發生,你可以使用:

alter table tab_a drop partition yy01 update global indexes;

談一下如何設計Oracle 分割槽表

在談設計oracle分割槽表之間先區分一下分割槽表和表空間的個概念 表空間 表空間是乙個或多個資料檔案的集合,所有資料物件都存放在指定的表空間中,但主要存放表,故稱表空間。分割槽表 分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片 piece 的方法。一旦分...

談一下稀疏陣列

對於乙個初窺資料結構的人來說,稀疏陣列確實可以很好的幫助你鍛鍊思維。但自從第三次科技革命後,人們都一直在做著用空間去換取時間的損事,而以時間換空間的稀疏陣列,倒也跟北大考古專業有些心心相惜。當乙個陣列中大部分元素為0,或者為同乙個值時,可以使用稀疏陣列來儲存該陣列 小規模陣列便是稀疏陣列 像在編寫的...

淺淺的談一下mysql與oracle的區別

這裡我會淺淺的談一下mysql與oracle的區別 相同點 1.都是關係型資料庫管理系統 2.都是目前比較流行的資料庫 不同點 1.單引號的處理 mysql裡可以用雙引號抱起字串,oracle裡只可以供單引號抱起字串。mysql是乙個自動增長的資料型別,插入資料的時候,他不會自動增長,orcale不...