MySQL--RDS下的分区表实践

本文介绍了在RDS MySQL 5.6环境下,通过分区表来解决大表问题的实践过程。作者探讨了分区表的优点,如高效删除数据和查询优化,并分享了采用RANGE(时间)分区的案例。文章详细阐述了分区管理,包括增加、删除分区的操作,并提及使用DTS进行不停机的数据迁移方法。
摘要由CSDN通过智能技术生成

  实践背景
  
  项目中有的表空间太大,且行数太多,故决定对一些表进行分库分表。再研究选型方案的时候发现常用的一些分库分表的解决方案对业务代码修改较多,故决定采用MySQL的分区方案。
  
  其实在我个人看来,分区表就是MySQL帮我们实现了底层的分库分表,不需要涉及业务代码的修改,不需要关注分布式事务。因为就访问数据库而言,逻辑上还是只有一个表,但是实际上确有多个物理分区对象组成,会根据具体的分区规则查询具体的分区。
  
  介绍一下这次实践的表,表空间大小172G,1亿2千万条记录。
  
  数据库版本:RDS MySQL 5.6
  
  工具:阿里云DTS
  
  一、为什么分区?
  
  优点:
  
  对已过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据,它的效率远比DELETE高
  
  在where子句中包含分区条件时,可以只扫描必要的一个或者多个分区来提高查询效率
  
  例如下面语句:
  
  SELECT * FROM t PARTITION(p0,p1)WHERE c <5 仅选择与WHERE条件匹配的分区p0和p1中的记录
  
  涉及聚合函数SUM()、COUNT()的查询时,会在每个分区上并行处理
  
  分区把原本一个表的数据存储在多个物理磁盘上,实现了更高的IOPS
  
  缺点:
  
  无法使用外键,不支持全文索引(现在应该也没什么公司还在用外键吧)
  
  分区键设计不太灵活,如果不走分区键,很容易出现全表锁
  
  开发写一个SQL,不清楚mysql是怎么玩的
  
  二、RANGE分区
  
  目前MySQL支持范围分区(RANGE),列表分区(LIST),哈希分区(HASH)以及KEY分区四种。
  
  本文是以范围分区(RANGE)对时间进行的分区的,故我就简单介绍一下RANGE分区。更多分区类型详见官方文档MySQL 5.6 分区类型
  
  基于一个给定连续区间的列值,根据区间分配分区。最常见的是基于时间字段。其实基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。MySQL 5.6支持的分区函数
  
  本例中使用TO_DAYS函数
  
  CREATE TABLE members (
  
  id VARCHAR(25) NOT NULL,
  
  firstname VARCHAR(25) NOT NULL,
  
  lastname VARCHAR(25) NOT NULL,
  
  username VARC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值