(轉)ORACLE 分割槽表的設計
分割槽表的概念
分割槽致力於解決支援極大表和索引的關鍵問題。它採用他們分解成較小和易於管理的稱為分割槽的片(piece)的方法。一旦分割槽被定義,SQL語句就可以訪問的操作某一個分割槽而不是整個表,因而提高管理的效率。分割槽對於資料倉儲應用程式非常有效,因為他們常常儲存和分析巨量的歷史資料。
分割槽表的分類
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);
何時選擇列表分割槽
使用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;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12272958/viewspace-680858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle分割槽表和分割槽表exchangeOracle
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- oracle分割槽表和非分割槽表exchangeOracle
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- PG的非分割槽表線上轉分割槽表
- ORACLE分割槽表梳理系列Oracle
- 非分割槽錶轉換成分割槽表
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- 對oracle分割槽表的理解整理Oracle
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- oracle將表配置為分割槽表Oracle
- oracle 普通表-分割槽表改造流程Oracle
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- Oracle分割槽表基礎運維-01分割槽表分類Oracle運維
- Oracle SQL調優之分割槽表OracleSQL
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle分割槽表的分類及測試Oracle
- 非分割槽錶轉換成分割槽表以及注意事項
- ORACLE刪除-表分割槽和資料Oracle
- LightDB 22.4 新特性之相容Oracle線上轉換普通表為分割槽表Oracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-07增加分割槽(4 RANGE_HASH)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(5RANGE_LIST)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(6RANGE_RANGE)Oracle運維
- Oracle drop分割槽表單個分割槽無法透過閃回恢復Oracle
- oracle 19C新特性——混合分割槽表Oracle
- oracle 更改分割槽表資料 ora-14402Oracle
- MySQL線上轉分割槽表(以及TiDB)MySqlTiDB
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 【ASK_ORACLE】使用insert語句將普通錶轉換成分割槽表Oracle
- 【MYSQL】 分割槽表MySql