数据库分区,是数据库管理系统 提供的 一个 比较好的功能。当数据量大时,除了 分表,还可以对一个表进行分区。这样,就可以 再一个分区内 操作数据,提高性能。

常见的分区有 range、hash,一般情况下,range分区比较普遍。

注意的是,表分区,一定是在 创建表的时候 进行分区,后面才可以增加分区、删除分区。也就是说,分区操作的前提是 表 是一个 分区表。

比如:如果不是分区表,但是想增加分区时,会报错:

 1505 - Partition management on a not partitioned table is not possible

这种情况,如果 必须创建分区的话,那只能新建一个 分区表,然后再 把原表数据中 同步到新表中。

创建分区表的时候,分区字段必须是:

1. 主键

2. 非空

创建非分区表:

CREATE TABLE `t_1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

创建分区表: 

注意,在创建语句后面的 分号 ; 要去掉,不然 后面的分区语句就是单独的命令了。

CREATE TABLE `t_1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `create_time` datetime NOT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

 PARTITION by range columns(`create_time`)
(
PARTITION  p1 values less than ('2022-04-01 00:00:00'),
PARTITION  p2 values less than ('2022-07-01 00:00:00'),
PARTITION  p3 values less than ('2022-10-01 00:00:00'),
PARTITION  p4 values less than ('2023-01-01 00:00:00'))

在分区表上 新增分区

alter table t_1 add PARTITION 
(
PARTITION  p5 values less than ('2023-04-01 00:00:00'),
PARTITION  p6 values less than ('2023-07-01 00:00:00'),
PARTITION  p7 values less than ('2023-10-01 00:00:00'),
PARTITION  p8 values less than ('2024-01-01 00:00:00')) 

在分区表上 删除分区

alter table t_1 drop partition p8; 

分区维护 似乎比较麻烦,需要手动处理。可以设置定时任务 来完成 分区表的维护。

查询分区表 :

如果 没有加分区,则是全分区扫描:

mysql 创建分表 mysql怎么创建表分区_字段

 可以在查询语句中加上分区号,则只在 指定 分区中 扫描

select * from t_1  partition(p1) where id=1

mysql 创建分表 mysql怎么创建表分区_大数据_02