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

MySQL 如何判斷是否支援分區功能與分區技術核心概念解析

     編輯:MySQL 綜合教學

MySQL 分區功能可將大型資料表在物理層面拆分為多個較小片段,提升查詢效能與管理彈性。本文說明如何檢查支援狀態,並深入解析分區核心概念與兩大分區策略。

檢查 MySQL 是否支援分區

方法一:查詢系統變數

SHOW VARIABLES LIKE '%partition%';

若輸出:

have_partitioning  YES

表示支援分區。

方法二:檢查插件狀態

SHOW PLUGINS;

若列表中有 partition ACTIVE STORAGE ENGINE GPL,表示分區引擎已啟用。

什麼是資料庫分區?

MySQL 資料以檔案形式儲存於磁碟(預設 /var/lib/mysql,可由 datadir 設定)。一張表對應三個檔案:

  • .frm:表結構定義
  • .MYD (MyISAM) / .ibd (InnoDB):資料檔案
  • .MYI (MyISAM):索引檔案

當單表資料量過大,檔案過大導致查詢緩慢、甚至超過檔案系統限制時,分區可將這三個檔案在物理層面拆分為多個較小片段,查詢時僅掃描相關分區(分區修剪),大幅提升效能;也可將不同分區分散至不同磁碟/掛載點,突破單一磁碟容量限制。

兩大分區策略:橫向 vs 縱向

橫向分區—— 按行水平切分

定義:依據某欄位範圍、列表、雜湊等規則,將資料行分配到不同分區。表結構完全相同,每個分區擁有完整欄位。

例子:100 萬筆訂單,依 order_date 每月一個分區,或依 customer_id 雜湊分 10 區。

CREATE TABLE orders (
    id INT, order_date DATE, customer_id INT, amount DECIMAL(10,2)
) PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2023 VALUES LESS THAN (2024),
    PARTITION p2024 VALUES LESS THAN (2025),
    PARTITION pmax VALUES LESS THAN MAXVALUE
);

優點:查詢可透過分區修剪大幅減少掃描行數;支援分區獨立維護(歸檔、刪除、重建索引)。

縱向分區—— 按欄位垂直切分

定義:將大欄位(如長文本、BLOB)或低頻存取欄位移至獨立表,主表保留高頻核心欄位。實質上是拆表而非原生分區功能。

例子:用戶表拆分為 users_core(id, name, email, status)與 users_profile(user_id, bio, avatar, preferences)。

-- 核心表(高頻存取)
CREATE TABLE users_core (id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(100), status TINYINT);

-- 延伸表(低頻、大欄位)
CREATE TABLE users_profile (user_id INT PRIMARY KEY, bio TEXT, avatar BLOB, preferences JSON);

優點:核心表行長度大幅縮減,單頁存放更多行,緩存命中率提升;大物件不影響核心查詢效能。

MySQL 原生分區類型

類型適用場景範例
RANGE連續範圍(日期、ID區間)按年/月分區歷史資料
LIST離散值列表(地區、狀態碼)依國家代碼分區
HASH均勻分布,無明確範圍大表雜湊分 16 區
KEY類似 HASH,支援非整數欄位依 UUID/字串欄位分區
SUBPARTITION複合分區(RANGE+HASH 等)按年分區再雜湊分區

重要限制與注意事項

  • 分區鍵必須是主鍵/唯一鍵的一部分(若表有 PK/UK)
  • 外鍵不支援分區表
  • 所有分區必須使用相同儲存引擎
  • MySQL 8.0 移除通用分區引擎,僅 InnoDB/NdbCluster 原生支援
  • 過度分區(超過數百個)會增加優化器負擔,建議 < 100 個

何時考慮分區?

  • 單表超過 1 億行或 100GB+
  • 明顯的資料存取熱冷分離(如歷史日誌、按時間查詢)
  • 需快速歸檔/刪除大批歷史資料(DROP PARTITION 秒級完成)
  • 單一磁碟 I/O 成為瓶頸,需分散至多磁碟
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved