分區表的概念
分區致力于解決支持極大表和索引的關鍵問題。它采用他們分解成較小和易于管理的稱為分區的片(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;
ORACLE 分區表的設計
2019-11-06 13:34ORACLE教程網 Oracle
分區致力于解決支持極大表和索引的關鍵問題。它采用他們分解成較小和易于管理的稱為分區的片(piece)的方法。
延伸 · 閱讀
- 2022-03-07Oracle Linux 能否成為企業級 CentOS 的替代品?
- 2022-03-05Oracle VM VirtualBox 虛擬機硬盤擴容
- 2022-02-28oracle刪除超過N天數據腳本的方法
- 2022-02-25oracle重置序列從0開始遞增1
- 2022-02-24Oracle 觸發器trigger使用案例
- 2022-02-23Linux 7.4上安裝配置Oracle 11.2.0.4圖文教程
- Oracle
Oracle 12c Release 2 RAC 安裝 Oracle Linux 7
一、概述 本文主要闡述基于ASM 構建 Oracle 12c RAC數據庫的過程說明 1、系統版本要求 確保 Oracle Linux 版本為 6 或更高版本。 確保兩個節點的 Oracle Linux 內核版...
- Oracle
關于Oracle多表連接,提高效率,性能優化操作
這篇文章主要介紹了關于Oracle多表連接,提高效率,性能優化操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧...
- Oracle
Oracle中簡單查詢、限定查詢、數據排序SQL語句范例和詳細注解
這篇文章主要介紹了Oracle中簡單查詢、限定查詢、數據排序SQL語句范例和詳細注解,對查詢語法一并做了介紹,需要的朋友可以參考下 ...
- Oracle
Oracle中的SUM用法講解
今天小編就為大家分享一篇關于Oracle中的SUM用法講解,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...
- Oracle
詳解Oracle自定義異常示例
這篇文章主要介紹了詳解Oracle自定義異常示例的相關資料,需要的朋友可以參考下 ...
- Oracle
Oracle連接配置解讀
這篇文章主要介紹了Oracle連接配置解讀,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編...
- Oracle
關于SQL執行計劃錯誤導致臨時表空間不足的問題
故障現象:臨時表空間不足的問題已經報錯過3次,客戶也煩了,前兩次都是同事添加5G的數據文件,目前已經達到40G,占用臨時表空間主要是distinct 和gro...
- Oracle
深入ORACLE遷移到MYSQL的總結分析
本篇文章是對ORACLE遷移到MYSQL進行了詳細的總結與分析,需要的朋友參考下 ...