数据库笔记6——分区

mysql分区属于水平切分,如果有主键必须使用主键来分区,查询结果如果跨分区会自动合并

A、 range分区: 必须使用主键来分区,数据分配不均匀

alter table user partition by range(id) (

   partition p1 values less than (1), 

   partition p2 values less than (5), 

   partition p3 values less than maxvalue

);

B、 hash分区:主要用来确保数据在预先确定数目的分区中平均分布,你所要做的只是基于将要被哈希的列值 指定一个列值或表达式,以及指定被分区的表将要被分割成的分区数量。

create table if not exists `hash_part` ( 

   `id` int(11) not null auto_increment comment '评论id', 

   `comment` varchar(1000) not null default '' comment '评论', 

   `ip` varchar(25) not null default '' comment '来源ip', 

   primary key (`id`) 

) engine=innodb default charset=utf8 auto_increment=1

partition by hash(id) 

partitions 3;

C、 list分区:

create table if not exists `list_part` (

   `id` int(11) not null comment '用户id',

   `province_id` int(2) not null default 0 comment '省',

   `name` varchar(50) not null default '' comment '名称',

   `sex` int(1) not null default '0' comment '0为男,1为女' 

) engine=innodb default charset=utf8

partition by list (province_id) ( 

     partition p0 values in (1,2,3), 

     partition p1 values in (4,5,6), 

     partition p2 values in (7,8,9), 

     partition p3 values in (10,11) 

);

D、key分区:支持非整数字段的分区

E、  range columns分区:支持datetime字段分区,支持多字段分区

CREATE TABLE rcx (

   a INT,

   b INT

   )

PARTITION BY RANGE COLUMNS(a,b) (

     PARTITION p0 VALUES LESS THAN (5,10),

     PARTITION p1 VALUES LESS THAN (10,20),

     PARTITION p2 VALUES LESS THAN (15,30),

     PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE)

);

insert into rcx(a,b)values(1,20),(10,15),(10,30);

第一组值:(1,20);1<5所以不需要再比较20了,该记录属于p0分区。

第二组值:(10,15),10>5,10=10且15<20,所以该记录属于P1分区

第三组值:(10,30),10=10但是30>20,所以它不属于p1,它满足10<15所以它属于p2

F、  list columns分区: 支持datetime字段分区,支持多字段分区

G、 alter table user drop partition p4

  删除分区连同数据

H、alter table user remove partitioning

  删除分区定义,数据不会删除,恢复回原表

posted @ 2022-03-15 22:01  暗,伏!  阅读(89)  评论(0编辑  收藏  举报