首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 分區表完整操作指南:範圍、Hash 與複合分區實戰

     編輯:Oracle 資料庫基礎

分區表概述與優勢

在大型企業應用中,數據量常達數十至數百 GB 甚至 TB 級。為提升讀寫查詢速度,Oracle 提供表與索引分區技術。主要優勢:

  • 增強可用性:某分區故障不影響其他分區數據訪問。
  • 維護方便:僅需修復故障分區。
  • 均衡 I/O:將不同分區映射到不同磁盤,平衡 I/O,提升整體性能。
  • 改善查詢性能:查詢僅掃描相關分區(分區剪枝),加快檢索。

Oracle 三大分區方法

  1. 範圍分區
  2. Hash 分區(散列分區)
  3. 複合分區

實戰演示:創建表空間與分區表

準備工作:創建三個表空間

CREATE TABLESPACE dinya_space01
DATAFILE '/test/demo/Oracle/demodata/dinya01.dnf' SIZE 50M;

CREATE TABLESPACE dinya_space02
DATAFILE '/test/demo/Oracle/demodata/dinya02.dnf' SIZE 50M;

CREATE TABLESPACE dinya_space03
DATAFILE '/test/demo/Oracle/demodata/dinya03.dnf' SIZE 50M;

1.1 範圍分區

根據某列值的範圍決定數據存儲分區。常見場景:按交易序號分區、按業務記錄創建日期分區。

案例:物料交易表 material_transactions,預計千萬級記錄

按交易序號分區:

CREATE TABLE dinya_test (
  transaction_id NUMBER PRIMARY KEY,
  item_id NUMBER(8) NOT NULL,
  item_description VARCHAR2(300),
  transaction_date DATE NOT NULL
)
PARTITION BY RANGE (transaction_id) (
  PARTITION part_01 VALUES LESS THAN (30000000) TABLESPACE dinya_space01,
  PARTITION part_02 VALUES LESS THAN (60000000) TABLESPACE dinya_space02,
  PARTITION part_03 VALUES LESS THAN (MAXVALUE) TABLESPACE dinya_space03
);

交易 ID < 3000 萬存入 part_01,3000-6000 萬存入 part_02,>6000 萬存入 part_03。

按交易日期分區:

CREATE TABLE dinya_test (
  transaction_id NUMBER PRIMARY KEY,
  item_id NUMBER(8) NOT NULL,
  item_description VARCHAR2(300),
  transaction_date DATE NOT NULL
)
PARTITION BY RANGE (transaction_date) (
  PARTITION part_01 VALUES LESS THAN (TO_DATE('2006-01-01','YYYY-MM-DD')) TABLESPACE dinya_space01,
  PARTITION part_02 VALUES LESS THAN (TO_DATE('2010-01-01','YYYY-MM-DD')) TABLESPACE dinya_space02,
  PARTITION part_03 VALUES LESS THAN (MAXVALUE) TABLESPACE dinya_space03
);

2006 年前數據存 part_01,2006-2010 年存 part_02,2010 年後存 part_03。

1.2 Hash 分區

通過哈希算法將數據均勻分布到指定數量的分區,適合無明顯範圍邏輯的列(如客戶 ID)。語法:PARTITION BY HASH(column) PARTITIONS n。

1.3 複合分區

結合範圍與 Hash:先按範圍分區,再在每個範圍分區內按 Hash 子分區。語法:PARTITION BY RANGE(col1) SUBPARTITION BY HASH(col2) SUBPARTITIONS n。適合既需歷史數據管理又需並行查詢優化的場景。

分區表常用維護操作

  • 新增分區:ALTER TABLE ... ADD PARTITION ...
  • 合併分區:ALTER TABLE ... MERGE PARTITIONS ...
  • 分割分區:ALTER TABLE ... SPLIT PARTITION ...
  • 截斷分區:ALTER TABLE ... TRUNCATE PARTITION ...(快速清空數據)
  • 交換分區:ALTER TABLE ... EXCHANGE PARTITION ... WITH TABLE ...(與非分區表交換數據,便於數據加載/歸檔)
  • 移動分區:ALTER TABLE ... MOVE PARTITION ... TABLESPACE ...(調整存儲位置)

最佳實踐建議

  1. 選擇分區鍵時考慮查詢模式:常用於 WHERE 條件的列優先。
  2. 分區數量適中:過多增加元數據開銷,過少無法發揮並行優勢。
  3. 配合本地索引使用:本地索引與表分區對齊,維護更靈活。
  4. 定期監控分區大小與數據分布,及時調整。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved