MySQL中级优化教程(七)——表垂直拆分和水平拆分

表的垂直拆分:

 

所谓垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题,通常垂直拆分可以按照以下原则进行:

  1. 1.把不常用的字段单独放到一张表中。
  2. 2.把大字段独立存到一张表中。
  3. 3.把经常一起使用的字段放到一起。

 

举个栗子:

我们可以看到title列(varchar(255))和description列(text)所占空间都比较大

因此我们将其拆分出来:

经过上述操作后,我们对主表查询操作的效率就提升了,减少了很多每次查询主表时不必要的IO操作。而简单理解,垂直拆分就是在垂直维度上对一张表进行拆分(在垂直排列的一行行列中抽出去几个)。

 

表的水平拆分:

那么水平拆分又是什么?

可能有些对垂直拆分理解的差不多的同学已经猜出来了--在水平维度上对表进行拆分?怎么个拆法呢?拆字段吗?

是的,的确可以这么理解,水平拆分就是在水平维度上,竖着给一张表来一刀(也可以是几刀),将它切成两张一模一样的表,比如第一张表count1存储0-4数字,第二张表count2存储5-9数字,如果我们一张表有一亿条数据,我们将其拆成十张表来存储,这样查询时效率就提升了很多倍。

水平拆分一般的做法是:
如果我们要把一张表拆分成5张,我们就对主键id进行取模运算,mod(id,5),得到的值是0~4,我们就可以用这五个值来决定到哪张表进行存/取操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请保持优秀。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值