36套java进阶高级架构师视频+38套大数据视频 需要视频的加我vx:du13797566440
一个数据表里边存储的记录信息太多了,记录的条数达到1-2亿条信息。
这是该数据表的活性就大大降低,数据表的运行速度就比较慢、效率低下,影响mysql数据库的整体性能。
现在设置一个水平分割,把许多的记录信息分别存储到不同的数据表里边,这样每个表存储的记录就比较少,该表的活性大大提高。
分表设计的两种模式:
① 逻辑方式分表
mysql数据库本身就有分表技术,该方式的分表可以节省java/php等语言的逻辑处理。
水平/垂直拆分
② 物理方式分表
自己手动创建多个数据表出来
java/php等程序需要考虑分表算法:数据往哪个表写,从哪个表读
2四种格式的逻辑分表
具体为:key hash ---->[求余方式]
range list ---->[范围方式]
注意:分表字段必须是主键 或 主键的一部分
2.1 key分表
partition by key(条件字段id) partitions 10;
2.2 hash分表
根据表达式/字段方式进行分表设计
partition by hash(表达式/字段) partitions 数量;
2.3 range分表
根据 字段/表达式 是否满足某个范围条件进行分表设计
partition by range(year(pubdate))(
#小于1980年的为一个表...
partition hou70 values less than (1980),
partition hou80 values less than (1990),
partition hou90 values less than (2000),
partition hou00 values less than (2010)
)
2.4 list分表
根据 表达式/字段 的内容值是否在某个“列表”中进行分表设计。
partition by list(month(pubdate))(
partition spring values in (3,4,5),
partition summer values in (6,7,8),
partition autumn values in (9,10,11),
partition winter values in (12,1,2)
)
3. 分表管理
具体就是对已经存在的分表进行增加、减少操作。
增加分表 不会引起数据丢失。
减少分表 在range/list领域会造成数据丢失
在key/hash领域不会造成数据丢失,
这两个领会在进行减少分表的同时就把全部数据重新整合到存在的表中,
key/hash两种分表与业务逻辑关联不紧密。
3.1 增加分表
求余方式: key/hash
> alter table 表名 add partitions 数量;
范围方式: range/list
> alter table 表名 add partition(
partition 名称 values less than (常量)
或
partition 名称 in (n,n,n)
);
3.2 删除分表
求余方式(key/hash):
>alter table 表名 coalesce partition 12;
删除分表不会造成数据丢失,每次分表数据都重新整合到存在的分表里边。
范围方式(range/list):
>alter table 表名 drop partition 分区名称;
删除分表会造成数据丢失
4. 垂直分表
水平分表:是把一个表的全部记录信息分别存储到不同的分表之中。
垂直分表:是把一个表的全部字段分别存储到不同的表里边。
有的时候,一个数据表设计好了,里边有许多字段,但是这些字段有的是经常使用的,有的是不常用的。
例如,一个数据表有20个字段,其中10个字段是常用的,后10个字段是不常用的
那么在操作常用字段的时候,就不得不给其他不常用的字段也分配一定的资源进行操作。
数据表:
会员表: user_id 登录名 密码 邮箱 手机号码 身高 体重 性别 家庭地址 身份证号码
以上表,红色是常用的,蓝色的是不常用的
为了使得常用字段运行速度更快、效率更高,把常用字段给跳出来,因此数据表做以下设计:
会员表(主)字段:user_id 登录名 密码 邮箱 手机号码
会员表(辅)字段:user_id 身高 体重 性别 家庭地址 身份证号码
以上把会员表根据字段是否常用给分为两个表的过程就是垂直分表。