什么是mysql的垂直分表,理论依据是什么,如何使用?

MySQL的垂直分表(Vertical Sharding/Table Splitting)是一种数据库优化技术,通过将一张表中不同字段拆分到多张表中,以解决单表数据量大、访问性能下降的问题。

一、什么是垂直分表?

想象一张user表,包含id(用户ID)、username(用户名)、password(密码)、avatar(头像URL)、bio(个人简介)、address(地址)、contact(联系方式)等20个字段。
其中,idusernamepassword是高频访问字段(如登录时每次都需查询),而avatarbio等是低频访问字段(仅个人主页展示时才用)。

垂直分表就是将这张表按「访问频率」或「字段关联性」拆分为:

  • user_core(核心表):存放idusernamepassword等高频字段;
  • user_profile(资料表):存放avatarbioaddress等低频字段。

两表通过id关联,需要完整信息时通过JOIN查询,日常高频操作仅访问user_core

二、理论依据:数据库访问的「局部性原理」

垂直分表的核心依据是计算机科学中的局部性原理

  • 时间局部性:最近访问过的数据,短期内可能再次被访问(如用户登录时反复查询账号密码);
  • 空间局部性:访问一个数据时,其相邻数据(同表其他字段)可能被一同加载(数据库按「数据页」读取,单表字段越多,每页存储的行数越少)。

当表字段过多时:

  1. 单条记录占用空间大,相同存储容量下能缓存的记录数减少,磁盘IO次数增加;
  2. 高频操作被迫加载大量无关的低频字段,浪费内存和带宽;
  3. 表结构复杂,维护成本高(如新增字段可能影响索引效率)。

垂直分表通过拆分字段,让高频操作仅涉及「小而精」的表,提升缓存利用率和查询效率。

三、如何使用垂直分表?

1. 拆分原则
  • 按访问频率拆分:高频字段(如订单表的order_idstatus)和低频字段(如remarklog)分开;
  • 按字段大小拆分:大字段(如text类型的文章内容、blob类型的图片)单独拆到一张表,避免拖累小字段查询;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值