MySQL优化(6):分表
程序员文章站
2022-06-17 21:44:48
分表 通常指:通过应用程序层,将数据划分到不同的表中进行存储 对比分区,分区是在服务器层完成的分区算法 分表会导致客户端明显的改变,在服务器端出现结构相同的多张表,甚至可以把多张表分到不同的服务器上 以账单表为例:数据库可能会有这样的情况 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不支持分区
分区和分表都称之为水平分割,于是有了垂直分割:
垂直分割:
每个表记录数量一直,但是字段不一致
这种方式其实不是太推荐的
无论垂直还是水平分割,本质都是把大的单位划分为小的单位