mysql 垂直分表 实践记录

一条数据中的字段太多,200多个,尝试将字段全部建在一张表内,出现错误:

Mysql [Err] 1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535.

尝试了网上各种办法后依然无效,无奈考虑到垂直分表,将字段分别建立在两张表内。

其中有几点值得记录:【数据持久化使用 Mybatis】

1、创建表:两张表需要有一个 取值 相同的字段 id:字段名可以相同,也可以不同,但字段值要相同;以此确定两张表中的一条数据,

2、查询时:第1 张表 Table1  左外连接(Left  Outer Join ) 第2 张表 Table2  on Table1.id = Table2.id 

3、新增时,判断字段属于哪一个表,根据字段所属表,将数据插入到对应表内。

     (1)、要插入的数据 ,全部封装在 一个  PG内(我自己代码里写的一个键值对 Map,键:字段名,值:字段值)

     (2)、在 Mapper 内明确好 每个表的表名,所包含的字段,

     (3)、拼接好 每个表 新增数据的 SQL语句

     (4)、PG 传入后,自动匹配字段,从而自动插入到不同的表

  =============================分割线==============================    

另一个需求:由于我的数据是分批上传,需要保留每一批上传数据的历史记录,因此::

1、在两个表内 都增加一个 “recordid” 字段,每一批数据一个唯一的 recordid (实质上只需要第一个表有这个字段就行,两个表数据根据相同的 ID 关联 ,我这里第二个表也存了recordid,有数据冗余,只是直觉感觉到以后会用到,具体哪里会用到还不知道)。

2、新增一个 record 表,表内至少有一个 recordid 字段,create_time 字段,  还有其他业务需要的自定义字段,保存每次上传信息。

3、查询上传记录时,首先查询  record 表,再从  record 表 内提取 recordid  去数据表内查询 该批次数据。

猜你喜欢

转载自blog.csdn.net/NRlovestudy/article/details/89416782