欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL优化(6):分表

程序员文章站 2022-03-10 19:37:08
分表 通常指:通过应用程序层,将数据划分到不同的表中进行存储 对比分区,分区是在服务器层完成的分区算法 分表会导致客户端明显的改变,在服务器端出现结构相同的多张表,甚至可以把多张表分到不同的服务器上 以账单表为例:数据库可能会有这样的情况 create table bill201710( id in ......

分表

通常指:通过应用程序层,将数据划分到不同的表中进行存储

对比分区,分区是在服务器层完成的分区算法

分表会导致客户端明显的改变,在服务器端出现结构相同的多张表,甚至可以把多张表分到不同的服务器上

 

以账单表为例:数据库可能会有这样的情况

create table bill201710(
id int unsigned auto_increment primary key,
user_ud int unsigned,
amount decimal(10,2),
date int
);
create table bill201711(
id int unsigned auto_increment primary key,
user_ud int unsigned,
amount decimal(10,2),
date int
);
create table bill201712(
id int unsigned auto_increment primary key,
user_ud int unsigned,
amount decimal(10,2),
date int
);

 

而是又java等代码进行处理,区分应该选择哪一张表,根据传递的时间参数进行划分

实际中,有一个比较麻烦的问题,主键id的问题,理论上id是不可以重复的

解决方案:

(1)代码层面,手动做一个自增id,不稳妥

(2)利用数据库,新建一张独立地表,一张生成id地表

create table billid(
id int unsigned auto_increment primary key
)

在插入真正的账单之前,先去id表取一个id,这种方式也是常用的方式

 

分表的原因:

(1)为数据库减压

(2)数据库分区算法的局限性,也是最重要的原因

(3)数据的支持不完善,老版本mysql不支持分区

 

分区和分表都称之为水平分割,于是有了垂直分割:

 

垂直分割:

每个表记录数量一直,但是字段不一致

这种方式其实不是太推荐的

无论垂直还是水平分割,本质都是把大的单位划分为小的单位