首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 分區表建立完整範例:範圍分區、全域/本地索引、表空間映射

     編輯:Oracle 資料庫相關知識

分區表是大數據量環境下提升查詢效能、簡化維運 (如歸檔、清理) 的核心技術。本文提供生產級 RANGE 分區表完整 DDL:按月分區、各分區獨立表空間、全域主鍵索引、本地索引對應分區表空間,可直接參考調整部署。

一、按月範圍分區表 (RANGE PARTITIONING)

CREATE TABLE t_mhdp (
  id             VARCHAR2(50) NOT NULL,
  flt_aircode    VARCHAR2(4),
  flt_number     NUMBER(7),
  flt_date       DATE
)
PARTITION BY RANGE (flt_date)
(
  PARTITION part201105 VALUES LESS THAN (TO_DATE('2011-06-01','YYYY-MM-DD'))
    TABLESPACE ts_mhdp_1105
    PCTFREE 10 INITRANS 1 MAXTRANS 255
    STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED),

  PARTITION part201106 VALUES LESS THAN (TO_DATE('2011-07-01','YYYY-MM-DD'))
    TABLESPACE ts_mhdp_1106
    PCTFREE 10 INITRANS 1 MAXTRANS 255
    STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED),

  PARTITION part201107 VALUES LESS THAN (TO_DATE('2011-08-01','YYYY-MM-DD'))
    TABLESPACE ts_mhdp_1107
    PCTFREE 10 INITRANS 1 MAXTRANS 255
    STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED),

  PARTITION part_default VALUES LESS THAN (MAXVALUE)
    TABLESPACE ts_mhdp
    PCTFREE 10 INITRANS 1 MAXTRANS 255
    STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED)
);

關鍵點說明

  • VALUES LESS THAN:上界**不包含**,下一分區起始值即為上一分區上界。
  • MAXVALUE:兜底分區,收納超出所有定義邊界的資料,防止 ORA-14400 插入失敗。
  • 分區獨立表空間:便於備份/還原單月資料、異地掛載、儲存分級 (熱/溫/冷數據分離)。
  • NLS_CALENDAR=GREGORIAN 為隱含預設,可省略。

二、全域索引 (GLOBAL INDEX)

CREATE INDEX index_mhdp_pk ON t_mhdp(id)
  TABLESPACE ts_index_mhdp
  PCTFREE 10 INITRANS 2 MAXTRANS 255
  STORAGE (INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS UNLIMITED);
  • 全域索引**不隨分區對齊**,單一 B-tree 覆蓋全表。
  • 優點:唯一性約束 (PK/UK) 必須用全域索引;跨分區查詢單一索引掃描。
  • 缺點:分區維運 (TRUNCATE/DROP/EXCHANGE PARTITION) 會導致全域索引 **UNUSABLE**,需 UPDATE GLOBAL INDEXES 子句或事後重建。

三、本地索引 (LOCAL INDEX)

CREATE INDEX index_mhdp_pk ON t_mhdp(id) LOCAL
(
  PARTITION part201105 TABLESPACE ts_mhdp_index_1105,
  PARTITION part201106 TABLESPACE ts_mhdp_index_1106,
  PARTITION part201107 TABLESPACE ts_mhdp_index_1107,
  PARTITION part_default TABLESPACE ts_mhdp_index
);
  • 本地索引**一對一對應表分區**,結構與資料分區對齊。
  • 優點:分區維運 (TRUNCATE/DROP/EXCHANGE/MOVE PARTITION) **自動同步索引分區**,無 UNUSABLE 風險;備份/還原粒度細。
  • 缺點:無法建立全表唯一性約束 (除非分區鍵包含在索引鍵中);跨分區查詢需掃描多個索引分區。

四、選擇建議

場景推薦索引類型
主鍵/唯一鍵 (分區鍵非前綴)GLOBAL INDEX + UPDATE GLOBAL INDEXES
主鍵包含分區鍵 (如 PK(id, flt_date))LOCAL INDEX (可建唯一)
頻繁 TRUNCATE/DROP 舊分區LOCAL INDEX (免維護)
跨分區範圍查詢為主GLOBAL INDEX (單掃描)
分區裁剪查詢為主LOCAL INDEX (分區對齊)

五、進階:間隔分區 (INTERVAL PARTITIONING) 11g+

CREATE TABLE t_sales (...)
PARTITION BY RANGE (sale_date)
INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))  -- 自動建立月分區
(
  PARTITION p_first VALUES LESS THAN (TO_DATE('2020-01-01','YYYY-MM-DD'))
    TABLESPACE ts_sales_202001
);

免去手工 ADD PARTITION,適合持續增長的時間序列資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved