【mysql】垂直分表的意义是什么

前言

当数据库数据量大的时候,我们会考虑分库分表,但是在有些情况我们还会考虑垂直分表,比如这个表的字段过多,有几十个字段,我们就需要考虑垂直分表了,垂直分表解决了什么问题,接下来大家一起来看一下吧。

1、 innerDb 存储引擎结构

管理数据的基本单位页(page),管理页的单位为区(Extent),一个区由连续的页组成,一个页包含了连续的行,默认一个区有1M的存储空间,一个页默认16KB,一个区容纳64个页,在这个innerdb 中为了存储更多的页,对页进行了压缩,在跨页检索数据的时候压缩与解压缩效率并不是特别的高的,所以我们在设计数据库表的时候,每一个页要尽可能的多的存储行数据

在这里插入图片描述

2、实例分析

有一个商品表,字段有很多,我们将商品表拆分为商品基本信息表和商品详情信息表两个表,如下:
在这里插入图片描述
之前单表查询sql:

select * from 商品表 where 商品标题='xxxx'

差分完之后sql

select * from 商品基本信息表 a,商品基本信息表b where a.商品id=b.商品id and a.商品id='xxx'

假如有1亿的数据,假如没有索引,在没有垂直拆分的情况下,1k大小的行要存储625万页,遍历一行数据就要遍历625万页,如果做了拆分逻辑是这样的,他要先在39万页找到相关的数据,然后在根据id到详情表找到其它数据,然后在执行where条件。

mysql IO和页相关,遍历页越多,那么IO越多,效率越低,所以垂直拆分可以有效解决表字段多的行查询效率。

可能需要垂直分表的情况:

单表数据量未来可能千万,字段超过20个,且包含了很长的varchar等,高频访问的小字段放在小表里

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值