將一張大表按規則水平拆分為多個物理分區,邏輯上仍為一張表。優勢:並發統計、快速歸檔刪除、分散存儲、查詢剪枝提升性能。
支持 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。
| 類型 | 核心特點 |
|---|---|
| RANGE | 連續整數區間,非整數需表達式轉換(如 TO_DAYS()) |
| LIST | 枚舉值列表 |
| COLUMNS | RANGE/LIST 升級版,直接支持非整數、多列組合,無需表達式 |
| HASH | 指定分區數,按整數哈希分佈,非整數需轉換 |
| KEY | 除 TEXT/BLOB 外所有類型,內部哈希,無需轉換 |
EXPLAIN 顯示分區信息,舊版需 EXPLAIN PARTITIONS。NOT NULL。RANGE 插 NULL 視為最小值,LIST 需顯式列出 NULL,HASH/KEY 視為 0。YEAR()、MONTH()、TO_DAYS()、TO_SECONDS() 等。ANALYZE TABLE 重建。-- 移除分區定義(保留數據) 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 會連帶刪數據。
合理選擇分區類型、遵循主鍵包含分區列、善用分區剪枝與快速歸檔,能顯著提升大表維護與查詢效率。