1,建立分区表
CREATE TABLE `user_tb` (
`Uid` int(20) NOT NULL AUTO_INCREMENT,
`head` text,
`wxAcount` varchar(20) DEFAULT NULL,
`wxName` varchar(16) DEFAULT NULL,
`zfbAcount` varchar(30) DEFAULT NULL,
`zfbName` varchar(30) DEFAULT NULL,
`tel` varchar(20) DEFAULT NULL,
`orderNum` int(11) DEFAULT NULL,
`note` mediumtext,
PRIMARY KEY (`Uid`),
KEY `orderNum` (`orderNum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION by RANGE(Uid)(
PARTITION p1 VALUES less than(1000999),
PARTITION p2 VALUES less than(1001999),
PARTITION p3 VALUES less than(1002999)
);
注意:create语句后没有分号,直到分区语句结束之后才有分号
2,查看分区信息
select
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
from information_schema.partitions where
table_schema = schema()
and table_name='user_tb';
3, 为每个分区添加数据(调用之前的inster_111(),存储过程:call insert_llll(1000000,2998);)
注意:当插入的数据不在分区内时,插入语句将被无效
4,增加一个分区p4(ALTER TABLE user_tb add partition(partition p4 values less than (1003999));)
5,删除一个分区(alter table user_tb drop partition p2;)
6,查询p3中数据
7,explain语句
由于是估算所以显示的分区并不正确,但可以看到在执行语句时使用了的type为range
8,向新建的p4插入一条数据
insert into user_tb (head,wxAcount,wxName,zfbAcount,zfbName,tel,note) values (
substring(MD5(RAND()),1, RAND()*10), 1, 1, 1, 1, 1,
00000);
9,合并p3,p4分区
ALTER TABLE user_tb REORGANIZE PARTITION p3,p4 INTO(
PARTITION p3 VALUES LESS THAN (1003999)
);