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 p2 VALUES LESS THAN (1997),
PARTITION p3 VALUES LESS THAN (1998),
PARTITION p4 VALUES LESS THAN (1999),
PARTITION p5 VALUES LESS THAN (2000),
PARTITION p6 VALUES LESS THAN (2001),
PARTITION p7 VALUES LESS THAN (2002),
PARTITION p8 VALUES LESS THAN (2003),
PARTITION p9 VALUES LESS THAN (2004),
PARTITION p10 VALUES LESS THAN (2010),
PARTITION p11 VALUES LESS THAN MAXVALUE
);
關鍵點:最後一個分區使用 MAXVALUE 兜底,確保所有資料皆有歸屬,避免寫入失敗。
CREATE TABLE no_part_tab (
c1 INT(11) DEFAULT NULL,
c2 VARCHAR(30) DEFAULT NULL,
c3 DATE DEFAULT NULL
) ENGINE=MyISAM;
DELIMITER //
CREATE PROCEDURE load_part_tab()
BEGIN
DECLARE v INT DEFAULT 0;
WHILE v < 8000000 DO
INSERT INTO part_tab
VALUES (v, 'testing partitions', ADDDATE('1995-01-01', (RAND(v)*36520) MOD 3652));
SET v = v + 1;
END WHILE;
END//
DELIMITER ;
CALL load_part_tab(); -- 耗時約 8 分 17 秒
資料平均分佈於各年度分區,為後續效能測試奠定基礎。