Mysql对现有的表建立分区

1、首先介绍一个Mysql5.5中新增的分区功能:

COLUMN分区功能,只有RANGE COLUMN和LIST COLUMN这两种分区;支持整形、日期、字符串;

介绍的链接:https://www.cnblogs.com/chenmh/p/5630834.html

2、下面介绍一下对已有数据表的分区(针对字符串字段分区,时间字段分区网上代码很多了):

(1)先创建一张和需要分区的表(tamab02)一样的表(tamab02_copy),并建立分区:

CREATE TABLE `tamab02_copy` (
   `record_id` VARCHAR(32) NOT NULL COMMENT '设备异常信息id',
   `facility_no` VARCHAR(32) DEFAULT NULL COMMENT '设备编号',
   `data_time` VARCHAR(32) COMMENT '数据时间',
   `abnormal_type` VARCHAR(32) DEFAULT NULL COMMENT '异常类型',
   `abnormal_code` VARCHAR(32) DEFAULT NULL COMMENT '异常编码',
    PRIMARY KEY (`record_id`,`data_time`))ENGINE=INNODB DEFAULT CHARSET=utf8
    PARTITION BY RANGE COLUMNS(data_time)     --- 分区的字段一定要是PRIMARY KEY,所以PRIMARY KEY中包含data_time字段;
   (
    PARTITION p20180425 VALUES LESS THAN ('20180426000000'),    --- 将小于26号的数据分区到名称为p20180425这个分区中;
    PARTITION p20180426 VALUES LESS THAN ('20180427000000')     --- 将小于27号的数据分区到名称为p20180426这个分区中;
    )

(2)第二步是将tamab02这张表中的数据全部导入到新建表tamab02_copy中:

INSERT INTO tamab02_copy SELECT * FROM tamab02;

(3)此时可以先查一下,分区是否创建成功并且数据是不是已经成功导入到了新表tamab02_copy这张表中(查看分区的代码):

SELECT
  partition_name part, 
  partition_expression expr, 
  partition_description descr, 
  table_rows 
FROM
  INFORMATION_SCHEMA.partitions 
WHERE
  TABLE_SCHEMA = SCHEMA() 
  AND TABLE_NAME='tamab02_copy'

如果能看到下面样子的结果,恭喜你已经建立分区成功,并且导入数据成功:

(4)第四步,请务必上面三步操作成功,并能看到如上图所示的结果,再进行操作;

----删除原来的表tamab02(之所以要确保前三步成功,是因为如果不慎执行了第四步将原有的表删除了,会丢掉宝贵的数据...)

DROP TABLE tamab02;

(5)最后一步,只需要将新建的表改名为原表名即可,以后有数据都往新建表中的插入了:

ALTER TABLE tamab02_copy RENAME tamab02;

=========================

最后别忘了写存储过程和定时任务来每天建立下一天的分区!

 

你可能感兴趣的:(Mysql对现有的表建立分区)