mysql分区表详解
Posted autofelix
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql分区表详解相关的知识,希望对你有一定的参考价值。
〝 古人学问遗无力,少壮功夫老始成 〞
在公司业务发展到一定情况后,我们需要对mysql的海量数据进行分表存档,方便后期进行管理,而对于mysql的分表情况要试业务而定,大公司如果日志表一般会按照一天分一次,也会按照年分,阿里经过实战后表示,当表中数据超过500万条的时候,就需要分表,不然会影响到数据的读写性能。如果大家觉得文章有帮助,请给博主一波关注和评论。
目录
一、查看是否支持分区表
show plugins;
二、范围分区
CREATE TABLE `表名`(
-- 数据字段
)engine=INNODB
PARTITION BY RANGE(`字段名称`) (
PARTITION 分表名称 VALUES LESS THAN(范围),
PARTITION 分表名称 VALUES LESS THAN(范围)
);
三、 哈希分区
create table `表名`(
-- 数据字段
)engine=INNODB
PARTITION BY HASH(UNIX TIMESTAMP(`字段名称`)) PATITIONS 4;
四、时间分区
create table `表名`(
-- 数据字段
)engine=INNODB
PARTITION BY RANGE(YEAR(`字段名称`))(
PARTITION p0 VALUES LESS THAN(2017),
PARTITION p1 VALUES LESS THAN(2018),
PARTITION p2 VALUES LESS THAN(2019)
);
五、删除分区
ALTER TABLE `表名` DROP PARTITION 分表名称;
六、查看分区情况
SELECT
table_name,partition_name,partition_description,table_rows
FROM
information_schema.`PARTITIONS`
WHERE table_name = '表名';
七、 归档分区数据
- mysql数据库版本需要大于等于5.7
-- 分区归档操作步骤
-- 1.新建和分区表字段一致的数据表 归档表前缀为 arch_
CREATE TABLE `归档表表名`(
)engine=INNODB
-- 2.进行数据交换 p0为分区名
ALTER TABLE `原数据表表名` exchange PARTITION p0 WITH TABLE `归档表表名`;
-- 3.删除分区,避免对数据的再次写入
ALTER TABLE `原数据表表名` DROP PARTITION p0;
-- 4.将归档表引擎设置为 archive 在检表语句中mysql引擎必须和原数据表引擎一致,否则无法进行数据交换
ALTER TABLE `归档表表名` ENGINE=ARCHIVE;
以上是关于mysql分区表详解的主要内容,如果未能解决你的问题,请参考以下文章