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…