一、分區表的使用
簡單來說,分區表就是把物理表結構相同的幾張表,通過一定算法,組成一張邏輯大表。這種算法叫“分區函數”,當前 MySQL 數據庫支持的分區函數類型有 RANGE、LIST、HASH、KEY、COLUMNS。
無論選擇哪種分區函數,都要指定相關列成為分區算法的輸入條件,這些列就叫“分區列”。另外,在 MySQL 分區表中,主鍵也必須是分區列的一部分,不然創建分區表時會失敗,比如:
CREATE TABLE t (
a INT,
b INT,
c DATETIME(6),
d VARCHAR(32),
e INT,
PRIMARY KEY (a,b)
)
partition by range columns(c) (
PARTITION p0000 VALUES LESS THAN ('2019-01-01'),
PARTITION p2019 VALUES LESS THAN ('2020-01-01'),
PARTITION p2020 VALUES LESS THAN ('2021-01-01'),
PARTITION p9999 VALUES LESS THAN (MAXVALUE)
);
ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function (prefixed columns are not considered).
上面創建了表 t,主鍵是復合索引,由列 a、b 組成。表 t 創建分區表的意圖是根據列 c(時間列)拆分數據,把不同時間數據存放到不同分區中。
從錯誤的提示中看到:分區表的主鍵一定要包含分區函數的列。所以,要創建基于列c 的數據分片的分區表,主鍵必須包含列 c,比如下面的建表語句:
CREATE TABLE t (
a INT,
b INT,
c DATETIME,
d VARCHAR(32),
e INT,
PRIMARY KEY (a,b,c),
KEY idx_e (e)
)
partition by range columns(c) (
PARTITION p0000 VALUES LESS