分區表的分類 Range partitioning(定界分割)
Hash partitioning(雜湊分割)
List partitioning(列表分區)
Composite range-hash partitioning(範圍-雜湊組合分區)
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);
分區表的設計 如何選擇分區的類型,如何選擇分區的列呢?在這之前你必須明確你的目的——易管理性和效能,你更注重哪個方面?分區表所影響的方面可以歸類為以下幾種:效能、易管理性、資料清理。
下面分別說說分區表對每一項的具體影響,
效能:
這一般是分區的主要目的。分區將大表變成了小表,當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;