MySQL原理(九):表分区和分库分表

本文详细探讨了MySQL的表分区,包括RANGE、LIST、HASH、KEY、SUB、COLUMNS六种类型,并分析了其优势与限制。接着,介绍了分表的垂直与水平策略,以及分库的垂直与水平方法,强调了数据一致性和性能优化的重要性。最后,文章提及分库分表在应对高负载和性能瓶颈时的作用。
摘要由CSDN通过智能技术生成

前言

上一篇介绍了 MySQL 的存储过程和触发器,这一篇将介绍表分区和分库分表相关的内容。

表分区

原本的表文件都是以完整的形式存储在磁盘中,而表分区则是指将一张表的数据拆分成多个磁盘文件,然后放到磁盘中存储。

做了表分区之后,表在逻辑上还是同一张,只是磁盘中会划分为多个文件存储而已,所以表分区并不会影响原有的增删改查操作。

表分区只能进行水平划分,即以行为粒度进行划分,一条记录只能在一个分区中。

好处:

  1. 相较于使用单个文件存储表数据,表分区技术可以打破单个磁盘分区的容量限制。
  2. 对于一些失效数据,如三年前的数据,可以通过快速删除分区的方式清理,效率十分高。
  3. 能够在一定程度上提升磁盘 IO 检索数据的性能,毕竟只需对一小片磁盘表文件做寻道。
  4. 支持聚合函数的并行执行,比如 sum()、count() 这类函数,可以分别统计各分区的数据做汇总。
  5. 带来更好的数据管理性和可用性,当一个表文件受损时,不会影响其他分区文件中的表数据。

限制:

  • 单张表最多只能创建 1024 个分区,MySQL5.6 版本中拓展到 8192 个。
  • MySQL5.1 及之前的版本中,分区键只能选择整数型字段,或支持哈希函数处理的字段。
  • 对一个表做了分区后,后续使用表的过程中,无法对表上的其他字段建立唯一索引。
  • 分区表中无法创建外键,不过一般情况下表也不允许创建外键,都是靠逻辑上维护主外关系。
  • 表中存在主键、唯一键的情况下,分区键的字段必须为主键或唯一键的部分或全部字段。

在 MySQL 中总共支持六种分区类型:range、list、hash、key、sub、columns。

RANGE

按照一个字段范围进行分区,仅支持整数类型字段作为分区键,如果想要以日期字段来做数据分区,需要想将其转换为整数格式的时间戳。

partition by range(r_id)(
	partition p1 values less than (100000),
	partition p2 values less than (200000)
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值