CREATE TABLE test_table ( id INT NOT NULL, fname VARCHAR(30), job_code INT NOT NULL, store_id INT NOT NULL, PRIMARY KEY (`id`,`store_id`) ) PARTITION BY RANGE (store_id) ( PARTITION p0 VALUES LESS THAN (6), PARTITION p1 VALUES LESS THAN (11), PARTITION p2 VALUES LESS THAN (16), PARTITION p3 VALUES LESS THAN MAXVALUE ); ##说明当 store_id < 6 时数据放到p0 以此类推 CREATE TABLE test_table ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, action VARCHAR(20) NOT NULL, timestamp TIMESTAMP NOT NULL, PRIMARY KEY (id, timestamp) ) PARTITION BY RANGE (UNIX_TIMESTAMP(timestamp)) ( PARTITION p0 VALUES LESS THAN (UNIX_TIMESTAMP('2014-08-01 00:00:00')), PARTITION p1 VALUES LESS THAN (UNIX_TIMESTAMP('2014-11-01 00:00:00')), PARTITION p2 VALUES LESS THAN (UNIX_TIMESTAMP('2015-01-01 00:00:00')), PARTITION p3 VALUES LESS THAN (UNIX_TIMESTAMP('2015-02-01 00:00:00')) ); ##说明当 timestamp < 2014-08-01 00:00:00 时数据放到p0 以此类推 CREATE TABLE test_table ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, action VARCHAR(20) NOT NULL, timestamp DATETIME NOT NULL, PRIMARY KEY (id, timestamp) ) PARTITION BY RANGE (YEAR(timestamp)) ( PARTITION p0 VALUES LESS THAN (2013), PARTITION p1 VALUES LESS THAN (2014), PARTITION p2 VALUES LESS THAN (2015), PARTITION p3 VALUES LESS THAN (2016), PARTITION p4 VALUES LESS THAN MAXVALUE ); ##说明当 timestamp < 2013 时数据放到p0 以此类推 ##查看分区表中有哪些分区 SELECT TABLE_NAME, PARTITION_NAME FROM information_schema.PARTITIONS WHERE table_schema = DATABASE () AND table_name = 'test_table' ##查看分区中有哪些数据 SELECT * FROM test_table PARTITION (p1); ##利用 EXPLAIN 可以看到只需搜对应的区,不会搜索所有分区 EXPLAIN select * from employees where store_id=8; ##如果分区,分区字段的值必须要在分区规则内,否则报错。