【mysql分区分表】mysql 按时间分区 【partition】
大家好,我是烤鸭:
今天分享一下有关 mysql 分区。
需求:
按时间分区。 对千万数据左右的表,进行分区,数据的增加量大概千万/年。
代码实现:
模拟之前已经存在的表:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',`description` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`state` tinyint(4) NULL DEFAULT 0 COMMENT '0:未处理,1:处理中,2:处理完成,3:异常订单',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间'
) ;
#取消自增
alter table test modify id int;
#删除主键
alter table test drop PRIMARY KEY;
#添加复合主键
alter table test add PRIMARY KEY(id,create_time);
#id 改为自增
alter table test modify id int AUTO_INCREMENT;
#增加组合索引,分区的字段必须是唯一,所以唯一索引无法创建。
#ALTER TABLE test ADD UNIQUE (serial_no,delete_flag);
#增加分区,按时间 1 年
ALTER TABLE test PARTITION BY RANGE COLUMNS(create_time ) (PARTITION p1 VALUES LESS THAN ( '20190101'),PARTITION p2 VALUES LESS THAN ( '20200101'),PARTITION p3 VALUES LESS THAN ( '20210101'),PARTITION p4 VALUES LESS THAN ( '20220101'),PARTITION p5 VALUES LESS THAN ( '20230101'),PARTITION p6 VALUES LESS THAN ( '20240101'),PARTITION p7 VALUES LESS THAN ( '20250101'),PARTITION p8 VALUES LESS THAN ( '20260101'),PARTITION p9 VALUES LESS THAN ( '20270101')
);
简单介绍:
mysql分区类型
RANGE 分区:
基于属于一个给定连续区间的列值,把多行分配给分区。
LIST 分区:
类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。
HASH分区:
基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL中有效的、产生非负整数值的任何表达式。
KEY分区:
类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。
复合分区:
基于RANGE/LIST 类型的分区表中每个分区的再次分割。子分区可以是 HASH/KEY 等类型。
常用的命令:
#创建表时分区:
CREATE TABLE `test` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',`description` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,`state` tinyint(4) NULL DEFAULT 0 COMMENT '0:未处理,1:处理中,2:处理完成,3:异常订单',`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间',PRIMARY KEY (`id`) USING BTREE,INDEX `etc_cg_document_i4`(`state`) USING BTREE,
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact PARTITION BY RANGE (`id`)PARTITIONS 2(PARTITION `p1` VALUES LESS THAN (10000) ENGINE = InnoDB MAX_ROWS = 0 MIN_ROWS = 0 ,PARTITION `p2` VALUES LESS THAN (20000) ENGINE = InnoDB MAX_ROWS = 0 MIN_ROWS = 0 )
;
#增加分区:(以id分区)
alter table test partition by range(id)
(partition p1 values less than (10000),partition p2 values less than (20000)
);
#删除指定分区:
alter table test drop partition p1;
#删除所有分区:
Alter table test remove partitioning;
#查看分区信息
SELECTPARTITION_NAME,TABLE_ROWS
FROMINFORMATION_SCHEMA.PARTITIONS
WHERETABLE_NAME = 'test';
另外说下,如果删除分区,指定分区的数据也会同步删除,谨慎操作。
如果想mysql重建表分区并保留数据的的话,参考这篇:
https://blog.csdn.net/fdipzone/article/details/79769524
关于大数据量 mysql 优化看这篇:
https://blog.csdn.net/afsvsv/article/details/84998119
关于更多 mysql 分区的信息 看这篇文章:
https://www.cnblogs.com/sweet521/p/6439598.html
【mysql分区分表】mysql 按时间分区 【partition】相关推荐
- MySQL分区分表 原理详解
MySQL分区分表 为什么要分区和分表 我们的数据库数据越来越大,随之而来的是单个表中数据太多,以至于查询速度过慢,而且由于表的锁机制导致应用操作也受到严重影响,出现数据库性能瓶颈. MySQL中有一 ...
- mysql分库分区分表怎么做_mysql 分区、分表、分库分表。
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁 ...
- mysql大数据解决方案--分区分表分库
这篇文章主要介绍了MyBatis实现Mysql数据库分库分表操作和总结,需要的朋友可以参考下 前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处 ...
- 关系型数据之分区分表分库
文章目录 1.为什么需要分区分表分库 2.各种分区分表分库的情况 3.弊端 3.1分区弊端 3.2分表分库弊端 1.为什么需要分区分表分库 数据量达到一定规模,进行常规的sql语句优化已经效果不大的情 ...
- 数据库分区分表以及读写分离
数据库分区分表以及读写分离 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己 ...
- FreeSql (三十一)分区分表
分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中.把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同. 与分表不同,一张大表进行 ...
- sql server 数据库分区分表
sql server 数据库分区分表 作为演示,本文使用的数据库 sql server 2017 管理工具 sql server management studio 18,,创建数据库mytest,添 ...
- mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点
MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...
- mysql 分区表_MySQL 分区分表应用场景分析和分区中可能遇到的坑点
MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...
最新文章
- 科学界最牛的合影在这,能认全的都是大神!
- 程序员抱怨老婆追王一博入魔,长期被冷落想离婚
- 刚弄好的中台!又要开始拆了?难道是为了凑工作量?
- 找到比某个数大的最小的2的次幂
- lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
- CDN/视频流成“风口”,2 年内实现规模商用,揭晓 2020 年边缘计算发展现状!...
- Linux运维 第三阶段 (五) DNS(主从,rndc远程控制,子域授权,视图,压力测试)
- 保证速度与心情——pdg转pdf与djvu转pdf大法(不像网上的好多方法那样麻烦,方便快捷,纯傻瓜化操作!)
- 西门子模块选择pdf_西门子S120变频器编码器模块的选择和配置
- 交换机串行损耗解决之预加重与均衡对比
- 可视化学习第三周-对比型和分布型数据
- AE2022 for Mac安装包+安装教程
- QWebEngineView 实现网页触屏滑动
- MinDoc 接口文档在线管理系统
- 啊哈添柴挑战Java1826. 顺序输出(简单)
- MySQL错误:Can't create table‘..’ (errno:150)解决方案
- 关键路径上找时间,非关键路径上找资源
- redis3.0.7 cluster 集群部署
- 迈德威视MV-SUA133GC-T工业相机驱安装
- 遗传算法求函数最小值(多维)1
热门文章
- 前端学习(3026):vue+element今日头条管理-调整外观
- [html]HTML5如何隐藏video元素的控制栏、全屏按钮?
- 工作195:解决key值不唯一的报错
- 前端学习(2586):如何设计高扩展路由
- 前端学习(2478):请求提交
- 前端学习(2216):react元素渲染
- 前端学习(2130):编译作用域的概念
- 前端学习(2018)vue之电商管理系统电商系统把good_cat转换为字符串
- spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
- spring学习(36):注入简单类型