1、RANGE分区
a.创建表
DROP TABLE IF EXISTS `admin_log`;
CREATE TABLE `admin_log` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` CHAR(20) NOT NULL DEFAULT '' COMMENT '名字',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (5),
PARTITION p1 VALUES LESS THAN (10),
PARTITION p2 VALUES LESS THAN (15),
PARTITION p3 VALUES LESS THAN (20),
PARTITION p4 VALUES LESS THAN (25),
PARTITION p5 VALUES LESS THAN MAXVALUE
);
--注释:admin_log按id分区,p0区存放数据id<5,p1是5≤id<10,依次类推,id≥25的全部存放在p5中
b.新增数据同常表一致
INSERT INTO admin_log (name) VALUES ('test1'),('test2'),('test3'),('test4'),('test5'),('test6'),('test7'),('test8'),('test9'),('test10'),('test11'),('test12'),('test13'),('test14'),('test15');
c.验证新增的数据是否对应存入分区
SELECT partition_name,partition_expression,partition_description,table_rows FROM information_schema.PARTITIONS WHERE table_schema = SCHEMA() AND table_name='admin_log';
d.删除分区
ALTER TABLE admin_log DROP PARTITION p0;
删除成功后,实例中id<5的数据都将被删除
2、HASH分区
a.创建表
DROP TABLE IF EXISTS `admin_log1`;
CREATE TABLE `admin_log1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` CHAR(20) NOT NULL DEFAULT '' COMMENT '名字',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PARTITION BY HASH (id) PARTITIONS 20 ;
--注释:id通过hash计算,分成20个区
b.新增数据同常表一致
INSERT INTO admin_log1 (name) VALUES ('test1'),('test2'),('test3'),('test4'),('test5'),('test6'),('test7'),('test8'),('test9'),('test10'),('test11'),('test12'),('test13'),('test14'),('test15');
c.验证新增的数据是否对应存入分区
SELECT partition_name,partition_expression,partition_description,table_rows FROM information_schema.PARTITIONS WHERE table_schema = SCHEMA() AND table_name='admin_log1';
d.删除分区(减去3个分区)
ALTER TABLE admin_log1 COALESCE PARTITION 3;
e.新增分区(增加4个分区)
ALTER TABLE admin_log1 add PARTITION partitions 4;
注:hash不能像range那样单个分区删除 只能使用减去或新增合并分区,在新增或减去时,数据会重新计算进行分区