详解mysql重建表分区并保留数据的相关方法


本文摘自PHP中文网,作者jacklove,侵删。

本文介绍mysql重建表分区并保留数据的方法,mysql的表分区(partition)可以把一个表的记录分开多个区去存储,查询时可根据查询的条件在对应的分区搜寻,而不需要整表查询,提高查询效率。

有分区的表与没有分区的表使用上没有太大的区别,但如果要对表进行重新分区,删除分区重建会删除数据,因此不可直接进行操作,需要使用一些特别的处理实现。

mysql重建表分区并保留数据的方法:

1.创建与原始表一样结构的新表,新分区。
2.将原始表中数据复制到新表。
3.删除原始表。
4.将新表名称改为原始表名称。

实例:

日志表原始结构如下,按id分区。

1

2

3

4

5

6

7

8

9

10

11

CREATE DATABASE `test`;use `test`;CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '内容', `status` tinyint(3) unsigned NOT NULL COMMENT '记录状态', `addtime` int(11) unsigned NOT NULL COMMENT '添加时间', `lastmodify` int(11) unsigned NOT NULL COMMENT '最后修改时间', PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

/*!50100 PARTITION BY RANGE (id)

(PARTITION p10w VALUES LESS THAN (100000) ENGINE = InnoDB,

PARTITION p20w VALUES LESS THAN (200000) ENGINE = InnoDB,

PARTITION p50w VALUES LESS THAN (500000) ENGINE = InnoDB,

PARTITION p100w VALUES LESS THAN (1000000) ENGINE = InnoDB,

PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;insert into `log`(content,status,addtime,lastmodify)

values('content1',1, unix_timestamp('2018-01-11 00:00:00'), unix_timestamp('2018-01-11 00:00:00')),

('content2',1, unix_timestamp('2018-02-22 00:00:00'), unix_timestamp('2018-02-22 00:00:00')),

('content3',1, unix_timestamp('2018-03-31 00:00:00'), unix_timestamp('2018-03-31 00:00:00'));

查看数据分区分布

1

2

3

4

5

6

SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 'log';+----------------+------------+| PARTITION_NAME | TABLE_ROWS |

+----------------+------------+| p10w           |          3 |

| p20w           |          0 |

| p50w           |          0 |

| p100w          |          0 || pmax           |          0 |

+----------------+------------+


日志数据需要按时间进行搜寻,因此需要按日志时间重建分区。

阅读剩余部分

相关阅读 >>

如何设置mysql 时区

mysql中关于删除语句大全总结(上)

mysql如何设置客户端为gbk

mysql实现自动监控同步的脚本

mysql 查询结果取交集的方法

如何下载5.5版的mysql

mysql字符串截取 和 截取字符进行查询

在docker上安装运行mysql实例

浅谈mysql中的group by

mysql如何对字段设置自增

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...