mysql 分区表

分区表特点:

在逻辑上为一个表,在物理上存储在多个文件中。

1、确认mysql服务器是否支持分区表:

  mysql>  show plugins;

在这里插入图片描述
查询结果如有partition这一行,则支持分区。

2、分区类型

1)按hash分区

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `qq` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8
PARTITION BY HASH(id) PATITIONS 4;

2)按范围分区

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `qq` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8
PARTITION BY RANGE(id)(
  PATITION p0 VALUES LESS THAN (10000),
  PATITION p1 VALUES LESS THAN (20000),
  PATITION p2 VALUES LESS THAN (30000),
  PATITION p3 VALUES LESS THAN MAXVALUE
);
 

适用于分区键为日期类型,定期清除某一日期的数据

3)List 分区

CREATE TABLE `t_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `email` varchar(20) DEFAULT NULL,
  `qq` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=57 DEFAULT CHARSET=utf8
PARTITION BY LIST(id)(
  PATITION p1 VALUES in (1,2,3,4,5),
  PATITION p2 VALUES in (6,7,8,9,10)
);
 

如果插入一条list中没有的数据,报错!

3、其它

可以通过下面语句删除一个分区:

ALTER TABLE t_user DROP PARTITION p0;

可以通过下面语句添加一个分区:

alter table t_user add partition (partition p3 values less than (4000));

alter table t_user add partition (partition p3 values in (40));

版权声明:本文为eaphyy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。