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

MySQL 5.7 分區表全解析:類型、限制、管理與最佳實踐

     編輯:MySQL 資料庫相關知識

什麼是分區

將一張大表按規則水平拆分為多個物理分區,邏輯上仍為一張表。優勢:並發統計、快速歸檔刪除、分散存儲、查詢剪枝提升性能。

MySQL 5.7 新特性

支持 SELECT * FROM t PARTITION (p0,p1) WHERE c < 5 顯式指定分區,同樣適用於 DELETE/INSERT/REPLACE/UPDATE/LOAD DATA/XML。

檢查分區支持

SHOW PLUGINS;

partition 狀態為 ACTIVE 即支持。源碼編譯需加 -DWITH_PARTITION_STORAGE_ENGINE=1。

存儲引擎限制

  • 不支持:MERGE、CSV、FEDERATED。
  • 同表所有分區必須使用相同引擎;不同分區表可用不同引擎。

五大分區類型

類型核心特點
RANGE連續整數區間,非整數需表達式轉換(如 TO_DAYS())
LIST枚舉值列表
COLUMNSRANGE/LIST 升級版,直接支持非整數、多列組合,無需表達式
HASH指定分區數,按整數哈希分佈,非整數需轉換
KEY除 TEXT/BLOB 外所有類型,內部哈希,無需轉換

關鍵限制與注意點

  1. 分區名大小寫敏感,避免關鍵字。
  2. 主鍵/唯一鍵必須包含分區列;無主鍵/唯一鍵則無此限制。
  3. 5.7+ 直接 EXPLAIN 顯示分區信息,舊版需 EXPLAIN PARTITIONS。
  4. 分區列建議 NOT NULL。RANGE 插 NULL 視為最小值,LIST 需顯式列出 NULL,HASH/KEY 視為 0。
  5. 時間類型轉換函數:YEAR()、MONTH()、TO_DAYS()、TO_SECONDS() 等。
  6. 拆分/合併分區後統計信息失效,需 ANALYZE TABLE 重建。
  7. 非整數列做 RANGE/LIST 強烈建議用 COLUMNS 分區。

分區管理常用語句

-- 移除分區定義(保留數據)
ALTER TABLE tbl REMOVE PARTITIONING;

-- 為現有表添加 RANGE 分區
ALTER TABLE tb_partition.tb_varchar
PARTITION BY RANGE(id) PARTITIONS 3 (
  PARTITION part0 VALUES LESS THAN (5000),
  PARTITION part1 VALUES LESS THAN (10000),
  PARTITION part2 VALUES LESS THAN (MAXVALUE)
);

注意:REMOVE PARTITIONING 僅刪除定義不刪數據,DROP PARTITION 會連帶刪數據。

總結

合理選擇分區類型、遵循主鍵包含分區列、善用分區剪枝與快速歸檔,能顯著提升大表維護與查詢效率。

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