mysql 水平拆分方案_MySQL的水平拆分与垂直拆分

MySQL的水平拆分与垂直拆分

个人理解:当单表数据量过大的时候,查询速度会变得很慢,为了提高查询效率,可以采用拆分方案。、

水平拆分

所谓水平拆分,即数据表行的拆分

列1

列2

列3

列4

列5

列6

列7

拆分成

列1

列2

列3

列4

列5

列6

列7

列1

列2

列3

列4

列5

列6

列7

通常情况下,采用取模的方式进行表的拆分。例如一张有400w的用户表users,我们可以拆分成4张表users1、users2、users3、users4

然后通过id取模的方法把数据分散到四张表内:id%4+1=[1,2,3,4]

垂直拆分

垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表。表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。

列1

列2

列3

列4

列5

列6

列7

拆分成

列1

列2

列3

列4

列5

列6

列7

通常我们按以下原则进行垂直拆分:

1,把不常用的字段单独放在一张表;,

2,把text,blob等大字段拆分出来放在附表中;

3,经常组合查询的列放在一张表中;

例如学生答题表tt:有如下字段:

Id name 分数 题目 回答

其中题目和回答是比较大的字段,id name 分数比较小。

如果我们只想查询id为8的学生的分数:select 分数 from tt where id = 8;虽然知识查询分数,但是题目和回答这两个大字段也是要被扫描的,很消耗性能。但是我们只关心分数,并不想查询题目和回答。这就可以使用垂直分割。我们可以把题目单独放到一张表中,通过id与tt表建立一对一的关系,同样将回答单独放到一张表中。这样我们插叙tt中的分数的时候就不会扫描题目和回答了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值