//不支持动态创建分区
CREATE TABLE `rpt_exp_event_bucket_creative_d_across` (
`bucket_id` VARCHAR(200) NOT NULL DEFAULT 'zhu' COMMENT '分桶id',
`day` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '日志时间',
PRIMARY KEY (bucket_id,`day`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (TO_SECONDS(day))
(
PARTITION p20200228 VALUES LESS THAN (TO_SECONDS('20200229')) ENGINE = InnoDB,
PARTITION p20200229 VALUES LESS THAN (TO_SECONDS('20200301')) ENGINE = InnoDB,
PARTITION p20200301 VALUES LESS THAN (TO_SECONDS('20200302')) ENGINE = InnoDB,
PARTITION p20200302 VALUES LESS THAN (TO_SECONDS('20200303')) ENGINE = InnoDB
);

//支持动态创建分区
CREATE TABLE `rpt_exp_event_bucket_creative_d_across` (
`bucket_id` VARCHAR(200) NOT NULL DEFAULT 'zhu' COMMENT '分桶id',
`day` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '日志时间',
`partition_key` int(8) NOT NULL COMMENT '分区键(格式:yyyyMMdd)',
PRIMARY KEY (bucket_id,`day`,partition_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
PARTITION BY RANGE (partition_key)
(
PARTITION p20200228 VALUES LESS THAN (20200229) ENGINE = InnoDB,
PARTITION p20200229 VALUES LESS THAN (20200301) ENGINE = InnoDB
);

删除分区:
alter table rpt_exp_event_bucket_creative_d_across drop partition 20200229;
删除多分区:
alter table emp drop partition 20200229,20200301;

增加分区:
alter table rpt_exp_event_bucket_creative_d_across add partition(partition p202002301 values LESS THAN (202002302));

删除表的所有分区:
Alter table rpt_exp_event_bucket_creative_d_across removepartitioning; --不会丢失数据

分区表优点

在MySQL Server层分区表为一个表,而在MySQL存储引擎层分区表是多个表,因此有如下特点:
1、分区表对业务透明,只需要维护一个表的数据结构。
2、DML操作加锁仅影响操作的分区,不会影响未访问分区。
3、通过分区交换快速将数据换入和换出分区表。
4、通过TRUNCATE操作快速清理特定分区数据。
5、通过强制分区仅访问特定分区数据,减少操作影响。
6、通过大数据量分区能有效降低索引层数,提高查询性能。

分区表缺点

由于分区表在MySQL Server层为一个表,因此:
1、DDL操作需要锁定所有分区,导致所有分区上操作都被阻塞。
2、当表数据量较小时,分区表和非分区表性能相近,分区表效果有限。
3、当表数据量较大时,对分区表进行DDL或其他运维操作难度大风险高。
4、分区表使用较少,存在未知风险多,BUG多BUG多BUG多,MySQL社区版本免费,横向扩展成本低,分库分表实现简单且中间件完善。
5、当单台服务器性能无法满足时,对分区表进行分拆的成本较高,而分库分表能很容易实现横向分拆。
6、当分区表操作不当导致访问所有分区时,会导致严重的性能问题,而分库分表操作不当仅影响访问的表。
7、使用分库分表可以有效运维降低运维操作影响,对1亿数据量表做DDL操作需要谨慎评估,而对10万数据量表做DDL操作可以默认其很快完成。
8、使用分库分表可以有效减小宕机或其他故障影响,将数据分库分表到10套群集上,一套群集发生故障仅影响业务的一成。

mysql 表分区操作的更多相关文章

  1. 记一次MySQL表分区操作

    最近一次日常迭代中,业务线需要对一张大表进行联合查询,查询性能可想而知,测试过程中服务接口直接响应超时,导致服务不可用,最后临时对该表进行分区操作,暂时缓解性能问题.由于是第一次操作表分区,姑且记录一 ...

  2. MySQL表的四种分区类型

    MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...

  3. MySQL表名和数据库关键字相同解决办法

    今天改他们的代码的时候,遇到了MySQL表名和数据库关键字的问题. 由于表名是关键字,导致增删改查都报错. Hibernate: select leave0_.id as id22_, leave0_ ...

  4. MySQL 表分区详解MyiSam引擎和InnoDb 区别(实测)

    一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了.如:某用户表的记录超过了1000万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区 ...

  5. 清除mysql表中数据

    delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内 ...

  6. Python将MySQL表数据写入excel

    背景:将mysql表查询结果写入excel. 1.使用sqlyog工具将查询结果导出到Excel.xml中,用excel打开发现:因为text字段中有回车换行操作,显示结果行是乱的. 2.用mysql ...

  7. mysql表名忽略大小写问题记录

    问题描述:一开发同事在linux下调一个程序老是报错说找不到表,但是登陆mysql,show tables查看明明是已经创建了这张表的!!如下: mysql> show tables; +--- ...

  8. 查看mysql表结构和表创建语句的方法(转)

    查看mysql表结构的方法有三种:1.desc tablename;例如:要查看jos_modules表结构的命令:desc jos_modules;查看结果:mysql> desc jos_m ...

  9. 清空mysql表后,自增id复原

    alter table `ajy_servercategory` AUTO_INCREMENT=1; alter table `Table_Name` AUTO_INCREMENT=n; 一.清除my ...

随机推荐

  1. 1、OSI参考模型

    网络的层次模型:Core layer (核心层):高速转发,不建议做策略  Distribution layer (分布层,汇聚层):基于策略连接(路由控制,安全策略)Access layer (接入 ...

  2. 死磕mysql(4)

    想把论坛和博客上所有关于mysql的都看一遍,死磕到底 看到关于数据库快照的东西.......不懂,百度......然后就跑题了,看到了表锁这种东西unlock tables; 用来锁定表..... ...

  3. C++类中拷贝构造函数详解

    a. C++标准中提到"The default constructor, copy constructor and copy assignment operator, and destruc ...

  4. RUST actix-web连接有密码的Redis数据库

    RUST actix-web连接有密码的Redis数据库 actix-web的example里面,使用了自己的actix-redis,但是我尝试了一下,并不好用 替换成另一连接池,deadpool-r ...

  5. Codeforces_805

    A.当l == r时,肯定输出这个数就可以了,当存在两个或两个以上连续的数时,2肯定是最多的数,或最多的数之一. #include<bits/stdc++.h> using namespa ...

  6. 【OpenGL】OpenGL4.3常用指令目录

    参考OpenGL编程指南 第8版 VAO void glGenVertexArrays(GLsizei n, GLuint *arrays); 返回n个未使用的对象名到数组arrays中,用作顶点数组 ...

  7. Ubuntu mysql踩坑记录

    安装: 1.sudo apt-get install mysql-server 2. apt-get isntall mysql-client 3.  sudo apt-get install lib ...

  8. python3 kubernetes api 使用

    一.安装 github:https://github.com/kubernetes-client/python 安装 pip install kubernetes 二.认证 1.kubeconfig文 ...

  9. Shell脚本 一键重启

    有个程序必须用 kill -9 pid号   关闭后,才能重新启动,每次都要手动查找pid号,麻烦容易出错,写个shell脚本 就三行很方便,自动查找pid号-关闭程序-重启程序 #!/bin/bas ...

  10. php 安装扩展插件实例-gd库

    今天给php 安装一个扩展插件 gd库   一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...