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

MySQL 5.1 分區表技術深度解析:水平與垂直分區實戰效能提升

     編輯:MySQL 資料庫相關知識

什麼是資料庫分區?

分區是物理資料庫設計技術,主要目的:在特定 SQL 作業中減少資料讀寫總量,縮短回應時間。DBA 與建模人員應熟練掌握。

兩大分區形式

1. 水平分區

將資料表的列依條件分散到不同分區。所有欄位在每個分區完整保留,表特性不變。

例: 十年財務記錄表,依年份分為 10 個分區,每區存一年資料。

2. 垂直分區

將資料表欄位垂直切分,減少目標表寬度。不常用的大欄位(TEXT、BLOB)移至獨立分區,保持資料關聯同時提升常用欄位存取速度。

例: 含大型 TEXT/BLOB 欄位且低頻存取的表,將其拆出獨立分區。
關鍵原則: 設計分區時勿保留冗餘資料(多表重複父表資料)或透過視圖聯結邏輯父物件,否則水平分區效能大幅失效,垂直分區亦受影響。

MySQL 5.1 支援的分區模式

  • RANGE:依值範圍分區,如年份 < 1995、1995-1999、≥2000。
  • HASH:依一或多欄位 Hash 值分區,如主鍵 Hash 均勻分布。
  • KEY:Hash 擴展,由 MySQL 系統產生 Hash Key。
  • LIST:依預定義離散值清單分區,如 2004/2005/2006 年各一區。
  • COMPOSITE (複合):上述模式組合,如先 RANGE 再 HASH 子分區。

分區雙核心效益

1. 效能大幅提升

優化器若知曉目標資料僅在特定分區,直接掃描該分區(分區裁剪)。百萬列表分 10 區,掃描時間降為 1/10;索引建立更快;若分區分佈不同磁碟,I/O 理論可提升 100 倍。

2. 資料管理簡化

DBA 可針對特定分區執行刪除/歸檔/維護,不影響其他分區資料完整性。分區由系統自動管理,無需手工維護。

實戰測試:分區 vs 非分區 (800 萬筆)

建表語句

-- 分區表
CREATE TABLE part_tab (
  c1 INT DEFAULT NULL,
  c2 VARCHAR(30) DEFAULT NULL,
  c3 DATE DEFAULT NULL
) ENGINE=MyISAM
PARTITION BY RANGE (YEAR(c3)) (
  PARTITION p0 VALUES LESS THAN (1995),
  PARTITION p1 VALUES LESS THAN (1996),
  ...
  PARTITION p11 VALUES LESS THAN MAXVALUE
);

-- 非分區表
CREATE TABLE no_part_tab (c1 INT, c2 VARCHAR(30), c3 DATE) ENGINE=MyISAM;

資料灌入

-- 預存程序向 part_tab 每區均勻寫入 800 萬筆
CALL load_part_tab();  -- 8 分 17 秒
INSERT INTO no_part_tab SELECT * FROM part_tab;  -- 51 秒

範圍查詢效能對比

表類型查詢耗時EXPLAIN 關鍵資訊
非分區SELECT COUNT(*) FROM no_part_tab WHERE c3 BETWEEN '1995-01-01' AND '1995-12-31'38.30 秒type=ALL, rows=8000000, 全表掃描
分區SELECT COUNT(*) FROM part_tab WHERE c3 BETWEEN '1995-01-01' AND '1995-12-31'3.88 秒partitions=p1, rows=798458, 僅掃描 p1
結論: 設計良好的分區將回應時間降低 90%,EXPLAIN 確認優化器僅掃描目標分區。

垂直分區補充測試

移除低頻 VARCHAR(30) 欄位 c2 後,同樣查詢從 3.88 秒再降至 0.34 秒,再獲 90% 效能提升。設計時務必審視欄位是否真正關聯查詢需求。

MySQL 5.1 分區進階特性

  • 支援所有儲存引擎
  • 支援本地索引:每分區對應一索引分區
  • 中繼資料查詢:INFORMATION_SCHEMA.PARTITIONS
  • 所有 SHOW 指令支援分區資訊
  • 分區專屬維護指令:ADD/DROP/COALESCE/REORGANIZE/ANALYZE/CHECK/OPTIMIZE/REBUILD/REPAIR PARTITION
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved