大家好,我是烤鸭:
    今天分享一下有关 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】相关推荐

  1. MySQL分区分表 原理详解

    MySQL分区分表 为什么要分区和分表 我们的数据库数据越来越大,随之而来的是单个表中数据太多,以至于查询速度过慢,而且由于表的锁机制导致应用操作也受到严重影响,出现数据库性能瓶颈. MySQL中有一 ...

  2. mysql分库分区分表怎么做_mysql 分区、分表、分库分表。

    一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁 ...

  3. mysql大数据解决方案--分区分表分库

    这篇文章主要介绍了MyBatis实现Mysql数据库分库分表操作和总结,需要的朋友可以参考下 前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处 ...

  4. 关系型数据之分区分表分库

    文章目录 1.为什么需要分区分表分库 2.各种分区分表分库的情况 3.弊端 3.1分区弊端 3.2分表分库弊端 1.为什么需要分区分表分库 数据量达到一定规模,进行常规的sql语句优化已经效果不大的情 ...

  5. 数据库分区分表以及读写分离

    数据库分区分表以及读写分离 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己 ...

  6. FreeSql (三十一)分区分表

    分区 分区就是把一个数据表的文件和索引分散存储在不同的物理文件中.把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上,数据库不同实现方式有所不同. 与分表不同,一张大表进行 ...

  7. sql server 数据库分区分表

    sql server 数据库分区分表 作为演示,本文使用的数据库 sql server 2017 管理工具 sql server management studio 18,,创建数据库mytest,添 ...

  8. mysql表分区占用存储_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

  9. mysql 分区表_MySQL 分区分表应用场景分析和分区中可能遇到的坑点

    MySQL的分区和分表应用场景分析 在日常工作中当我们的某张表的数据量过大的时候,首当其冲的可能就是进行分区和分表,但是是如何分区或者分表都要结合一点的业务场景下进行分析,才会显著的提升性能,来聊一聊 ...

最新文章

  1. 科学界最牛的合影在这,能认全的都是大神!
  2. 程序员抱怨老婆追王一博入魔,长期被冷落想离婚
  3. 刚弄好的中台!又要开始拆了?难道是为了凑工作量?
  4. 找到比某个数大的最小的2的次幂
  5. lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
  6. CDN/视频流成“风口”,2 年内实现规模商用,揭晓 2020 年边缘计算发展现状!...
  7. Linux运维 第三阶段 (五) DNS(主从,rndc远程控制,子域授权,视图,压力测试)
  8. 保证速度与心情——pdg转pdf与djvu转pdf大法(不像网上的好多方法那样麻烦,方便快捷,纯傻瓜化操作!)
  9. 西门子模块选择pdf_西门子S120变频器编码器模块的选择和配置
  10. 交换机串行损耗解决之预加重与均衡对比
  11. 可视化学习第三周-对比型和分布型数据
  12. AE2022 for Mac安装包+安装教程
  13. QWebEngineView 实现网页触屏滑动
  14. MinDoc 接口文档在线管理系统
  15. 啊哈添柴挑战Java1826. 顺序输出(简单)
  16. MySQL错误:Can't create table‘..’ (errno:150)解决方案
  17. 关键路径上找时间,非关键路径上找资源
  18. redis3.0.7 cluster 集群部署
  19. 迈德威视MV-SUA133GC-T工业相机驱安装
  20. 遗传算法求函数最小值(多维)1

热门文章

  1. 前端学习(3026):vue+element今日头条管理-调整外观
  2. [html]HTML5如何隐藏video元素的控制栏、全屏按钮?
  3. 工作195:解决key值不唯一的报错
  4. 前端学习(2586):如何设计高扩展路由
  5. 前端学习(2478):请求提交
  6. 前端学习(2216):react元素渲染
  7. 前端学习(2130):编译作用域的概念
  8. 前端学习(2018)vue之电商管理系统电商系统把good_cat转换为字符串
  9. spring mvc学习(50):java.lang.ClassNotFoundException: org.springframework.web.servlet. DispatcherSe
  10. spring学习(36):注入简单类型