表的垂直拆分:
所谓垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题,通常垂直拆分可以按照以下原则进行:
- 1.把不常用的字段单独放到一张表中。
- 2.把大字段独立存到一张表中。
- 3.把经常一起使用的字段放到一起。
举个栗子:
我们可以看到title列(varchar(255))和description列(text)所占空间都比较大
因此我们将其拆分出来:
经过上述操作后,我们对主表查询操作的效率就提升了,减少了很多每次查询主表时不必要的IO操作。而简单理解,垂直拆分就是在垂直维度上对一张表进行拆分(在垂直排列的一行行列中抽出去几个)。
表的水平拆分:
那么水平拆分又是什么?
可能有些对垂直拆分理解的差不多的同学已经猜出来了--在水平维度上对表进行拆分?怎么个拆法呢?拆字段吗?
是的,的确可以这么理解,水平拆分就是在水平维度上,竖着给一张表来一刀(也可以是几刀),将它切成两张一模一样的表,比如第一张表count1存储0-4数字,第二张表count2存储5-9数字,如果我们一张表有一亿条数据,我们将其拆成十张表来存储,这样查询时效率就提升了很多倍。
水平拆分一般的做法是:
如果我们要把一张表拆分成5张,我们就对主键id进行取模运算,mod(id,5),得到的值是0~4,我们就可以用这五个值来决定到哪张表进行存/取操作。