分库分表举例详细说明

概念: 当数据库的内容, 经过长时间的积累, 数据量会越来越大, 会严重影响到数据库的执行效率, 降低查询效率, 这个时候为了提高效率, 我们可以采用分库分表的方式来进行, 对数据库的优化

分表

  • 水平分表
  • 垂直分表

水平分表(针对表的行数过多, 进行拆分)

  • 使用水平分表的例子, 就比如说是一个小学新来了一个校长, 校长要求把学生历年来的成绩, 包括周考和月考全都保存下来, 这样的话一年下来就会存在很多的学生成绩记录, 要想高效的解决这个问题, 我们就可以使用水平分表的操作来提高数据库的执行效率

不要着急容我慢慢分析

  • 例如要求一年级一班的学生成绩, 一直保存到他们六年级毕业, 但是期间他们会参加很多次的考试, 如果在一张表存肯定是没有问题的, 但是就有个缺点了, 比如一个班级学生60人, 一次考试就是60条数据, 一年下来就会有很多很多数据, 然后大量的数据都存到同一个表里边, 进行条件查询和筛选都会降低查询效率, 这个时候我们就可以使用水平拆分
  • 我们可以按照一个保准来创建表, 比如我们可以判断当前月, 例当前月是9月, 我们就可以创建一个表为 Sutdent_21_09 的表, 把这个月的学生成绩,就存到这个表里边, 这样的话就可以解决一个表里存了很多数据, 降低查询效率的问题
  • 如果这么做, 每周考试一次, 每个月一次月考, 一个月算下来有五次考试, 60个学生就是每月300条数据一张表, 这样可以有效提高查询效率

ps : 上文举的例子, 数据量不大, 也可没必要分表粒度按月, 或者按年, 上文只是为了方便理解举例而已

垂直分库(针对表的列数过多, 进行拆分)

  • 使用垂直分表的例子, 就比如这个校长通过长时间的数据分析发现, 家长和老师都更关注孩子的主要科目成绩, (数学, 语文, 英语) 这个时候, 一张表中存放了好多科目, 存在过多的列, 为了提高家长和老师的查询效率, 我们就可以采用垂直分库的方式, 提高查询的效率

容我举例分析

  • 比如我们每次更多的是查询,语数英三科的成绩, 这个时候, 我们就可以根据垂直拆分的方式, 把经常查的这三们成绩存到一张表里, 把其他科目的成绩存放到另一个表中, 通过大表拆小表的方式, 提高了查询的效率

ps : 上文例子, 列的数量不是很多, 基本上没必要强制使用垂直分表的方式, 只是举例, 方便理解而已

总结 : 水平和垂直分表的优缺点

优点

  • 水平分表
  1. 表的管理在数据库端就可以完成
  2. 不会存在超大量的数据,和高负载的情况
  3. 事务问题的处理相对简单
  4. 如果拆分规则定义好, 那么他的扩展性也是很好的
  • 垂直分表
  1. 拆分更加简单明了, 拆分的规则明确
  2. 数据维护方便, 容易定位

缺点

  • 水平分表
  1. 拆分的规则不明确, 很难抽象出一个能够满足的拆分规则
  2. 数据维护有难度, 手工定位数据比较不方便
  3. 耦合度太高, 会对后期数据迁移造成一定的困难
  • 垂直分表
  1. 存在单表数据量过大的问题 ( 需要水平分表 )
  2. 分布式事务处理复杂
  3. 对访问频繁并且数据量大的表依然存在性能问题

分库(待完善)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值