关于数据库:水平分表和垂直分表

1. 程度分表

(1) 什么是程度分表

程度分表就是指以行为单位对数据进行拆分,个别意义上的分库分表指的就是程度分表。
分表之后,所有表的构造都是一样的。

(2) 为什么要程度分表

程度分表能够解决一个表数据量太大的问题,如果一张表的数据太多,会对性能造成影响。

(3) 如何进行程度分表

个别能够有范畴法和hash法来进行程度分表。

假如当初有3万行数据,须要对它们进行程度分表(当然个别3万行不必分哈):
范畴法很好了解,能够让第1~10000行数据寄存在表1,第10001~20000行数据寄存在表2,第20001~30000行数据寄存在表3,就实现了程度分表。

hash法也不难理解,就是抉择一个适合的hash函数,比如说应用取模操作(%),把%3后果为0的数据寄存在表1,后果为1的寄存在表2,后果为2的寄存在表3即可。

2. 垂直分表

(1) 什么是垂直分表

垂直分表就是把一张表按列分为多张表,多张表通过主键进行关联,从而组成残缺的数据。
分表之后,每张表的构造都不雷同。

(2) 为什么要垂直分表

这次要跟某些数据库的引擎无关,比方Mysql的InnoDB引擎。

在Mysql中,数据的根本单位,称为 (Row)
治理数据的根本单位,称为 (Page)
保留页的单位,称为 (Extent)

一个区由间断的页组成,一个页由间断的行组成
默认每一个区的大小为1M,默认每一页的大小为16K,所以一个区有1024 / 16 = 64个页
而每个页中,依据每行数据的大小,又能够存储多个行

然而,在InnoDB 1.0版本之后,引入了一个新个性:压缩页
被压缩之后的页在理论占用空间上,比逻辑上的要小,然而在压缩和解压缩时会破费额定的工夫
这时如果呈现了跨页检索数据,效率就会比拟低

因而,在表设计时,尽可能的在页内多存储数据行,这样能够缩小跨页检索,提高效率。
而多存储数据行就意味着,每一行的列数要尽可能少。

(3) 如何进行垂直分表

既然要求每一行的列数尽可能少,那间接每个表就只存储一两列行不行?

当然不行!
这样做不仅会造成表过多,而且会产生大量反复字段(比方主键),在查问时还须要一直地进行多表关联
所以,如何进行垂直分表还是有技巧的。

一般来说,垂直分表并不会把列平分到2个表中,而是会将一些重要的字段独自剥离成小表,把残余的不太重要的字段放在大表中
比方,把查问、排序时须要的字段,高频拜访的小字段放在小表
而把低频拜访字段以及一些大字段放在大表中

参考鸣谢

为什么要垂直分表:https://www.bilibili.com/vide…

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年50元

阿里云限时活动-2核2G-5M带宽-60G SSD-1000G月流量 ,特惠价99元/年(原价1234.2元/年,可以直接买3年),速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

You may also like...

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据