什么是垂直分表

垂直分表则是代表将一张大表按“列”拆分为 2 张以上的小表,通过主外键关联来获取数据。

为什么需要垂直分表

一张表上百个字段,在很多年前做一些项目中,可能习以为常。应为以前项目的数据体量并大,怎样查都不会有太大的性能问题。

随着项目体量数据越来越大,尤其是在互联网大厂,查询等方面会有各方面的性能问题,所以现在必须进行拆分。

水平分表(扩展)

在进行垂直分表前,我们需要了解什么是水平分表。

水平分表是以行为单位对表进行拆分,每个表的结构都是一样的,解决的是数据量大的存储问题。例如:

  1. Hash 法
    通过定义算法,将数据存储与不同的分片库或表

  2. 范围法
    存储日志,可以根据时间线或者ID进行顺序分片存储

案例分析

接下来通过案例分析为什么需要进行垂直分表

左边是未拆分的商品表里面存储了所有的字段。右边是拆分后的商品表分为基本信息、详情表。

接着,我们看查询情况。乍一看没有什么区别,甚至有点画蛇添足的味道,其实这要从数据库底层进行分析。

如下图所示,最基本的一行一行数据成为 row,管理数据的基本单位称之为 page,在 mysql 中每一页的大小都是固定的 16k ,保存 page 的单位成为 extent,默认情况情况下 extent 有 1M 的存储空间,也就是一个区可以装载 64 个连续的 page。

在 MySQL 中一个概念叫做压缩页,顾明思议可以对也得数据进行压缩,实际的数据存储会比逻辑存储的数据小、既然有压缩必然有解压缩,但是压缩解压缩效率并不算高,所以咋表设计时要确保在每一页存多存储行数据,这样就可以减少跨页检索。

假设有 1 亿条数据,一个商品的信息为 1k,接下来分别对两种情况进行分析

单表:在这种情况下,每页只能存储 16 行数据,1 亿数据需要 625 万页,这种数据的处理效率肯定不会太高

垂直拆分:假设商品的一些基本信息存储在小表 64 字节/行,描述等大字段信息存储与大表,那么小表存在只需 39 万页。这样拆分后的可以根据小表快速检索,分解 id 查询大字段信息,这样效率是非常高的。

假设根据商品标题进行查询,未走索引(未建立或着建立错误等情况),要想查询一个商品就需要扫描 625 万页,也就是全表扫描。这 625 万页是分布在物理磁盘的,而我们的物理磁盘又是有 IO 性能极限的,所以 625 万的扫描肯定是不会快的。

垂直拆分以后,可以看到只需要扫描 39 万页数据,而这个效率比未拆分的情况下快了 16 倍。在扫描到对于的商品后可以根据商品 ID 再到大表对商品详情信息进行提取。而这样一来一回就将扫描效率提高了几十倍。

所以,通过将重要字段单独剥离出一张小表,让每一页能够容纳更多的行,进而缩小数据扫描的范围,达到提高执行效率的目的,这就是垂直分表的依据所在。

垂直分表依据

垂直拆分有很多的好处,那么什么情况下需要垂直分表呢,主要有以下两种情况

  1. 单表数据量未来可能千万
  2. 字段超过20个,且包含了超长的 Varchar、CLOB、BLOB 等字段

注意,有些情况存储大字段也无需垂直分表:
a. 日志表,有ID、时间、日志信息这个大字段,这种情况下分表是没有意义的,
b. 数据少只有几千行

字段存放依据

小表
1 . 数据查询、排序时需要的字段,如分类编号、商户id、品牌编号、逻辑删除标志位等

2 . 高频访问的小字段,如商品名称、子标题、价格、厂商基本等

大表
1 . 低频访问字段:配送信息、售后声明、最后更新时间等

2 . 大字段:商品图文详情、图片BLOB、JSON元数据等

注意:
a . 如果某些字段特别大,这种情况需要单独拆分表进行存储,应为这种情况对我们查询时底层扫描实在太大了

详谈为什么互联网公司需要垂直分表相关推荐

  1. MySQL:互联网公司常用分库分表方案汇总!

    本文来源: cnblogs.com/littlecharacter/p/9342129.html 一.数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数 ...

  2. 互联网公司常用分库分表方案汇总

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:rrd.me/g9zP3 一.数据库瓶颈 不管是I ...

  3. mysql分区表mycat_MySQL 中间件之Mycat垂直分表配置

    垂直分表就是将一个库下的多个表拆分到多个MySQL实例,实现库压力分流. 通过GTID模式复制,db01与db02之间不进行任何连接与复制 当前环境: mycat --> db01与db02 d ...

  4. mysql字段分隔符拆分_面试题Mysql数据库优化之垂直分表

    在日常的开发工作中,除了JAVA相关的技术,打交道最多的就是Mysql数据库,当数据积累到一定程度,比如500W时就会难免出现一些慢sql,对数据库的优化方式有很多,比如通过增加合理的索引,今天我们来 ...

  5. Sharding-Sphere,Sharding-JDBC_分库分表(垂直分库_垂直分表)_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记003

    首先我们看看分库分表有几种方式: 然后我们看, 有垂直分库,垂直分表 有水平分库,水平分表. 之前我们做mycat的时候,说过有垂直分库,水平分表, 垂直分表的情况好像是没有说. 要说垂直分表,我们先 ...

  6. mysql 垂直分表技术的实战演练,有实战代码。

    垂直分表技术 垂直分割指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能.这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系. 1,垂直 ...

  7. 数据库--分库分表--垂直分表与水平分表

    原文网址:数据库--分库分表--垂直分表与水平分表_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍数据库的分库分表的方案:垂直分表与水平分表. 关系型数据库本身比较容易成为系统瓶颈,单机存储容 ...

  8. 彻底搞清分库分表(垂直分库,垂直分表,水平分库,水平分表)

    分库分表是什么 下边以电商系统中的例子来说明,下图是电商系统卖家模块的表结构: 通过以下SQL能够获取到商品相关的店铺信息.地理区域信息: SELECT p.*,r.[地理区域名称],s.[店铺名称] ...

  9. 水平分表、分库和垂直分表、分库和公共表的代码实现和讲解

    文章目录 一.教学讲解视频 二.环境准备 三.水平分表 1.概念 2.代码 四.水平分库 1.概念 2.代码 五.垂直分表 1.概念 2.代码 六.垂直分库 1.概念 2.代码 七.公共表 1.概念 ...

最新文章

  1. 2018年最后几天学什么?给你关注度最高的10篇文章
  2. 手把手教您如何用U盘给电脑安装WIN10系统详细教程
  3. 浙大版《C语言程序设计(第3版)》题目集 练习3-3 统计学生平均成绩与及格人数 (15 分)...
  4. 安装好机器学习环境的虚拟机_虚拟环境之外的数据科学是弄乱机器的好方法
  5. 数学知识在游戏中的运用
  6. 20 Excellent AJAX Effects You Should Know
  7. 大佬分享:程序员必知的干货
  8. 程序员界大杯具:蜗居中的小贝是搞C++ 的 !
  9. 「leetcode」101. 对称二叉树
  10. Android studio: 自 maven 增加一個函式庫
  11. 解决 SQL 注入的另类方法
  12. 智联招聘基于Apache Pulsar打造企业级事件中心
  13. 万特电能表接线仿真系统 软件_【干货】简单明了电工教学仿真软件可下载
  14. 简单的网站全屏背景图代码
  15. 162-SOP8液晶手写板专用IC
  16. Redis 实例:开发一个Spring Redis应用程序
  17. 阿里云飞天系统的技术架构
  18. [转]关于卢平的一些想法
  19. 电子产品工艺设计基础
  20. 通过Pyecharts绘制可视化地球竟 然如此简单

热门文章

  1. 人生就像蒲公英,看似自由,却身不由己。
  2. Java Web实践专题——图片管理
  3. 继承TextView简单画一个尺子
  4. 信用评分卡A卡、B卡、C卡区别
  5. C++ 中生成随机数的代码
  6. Unity EasyDL 图像分割 - 识别图像中主体及其位置
  7. 如何将微信表情包保存到手机相册
  8. mirna富集分析_GEO芯片数据下载,矩阵提取,差异基因分析,差异miRNA分析,miRNA靶基因预测,GO、KEGG功能,蛋白互作网络构建 - 生物信息学讨论版 -丁香园论坛...
  9. tomcat 在linux上的重启和关闭命令
  10. PHP生成唯一的随机数(相对唯一)