关于MySQL数据表的垂直拆分和水平拆分场景及方法

如何进行数据库的水平拆分和垂直拆分? 数据库拆分是将一个大型数据库按照某种规则分解为多个较小、更易管理的数据库的过程。这种技术旨在解决单机数据库在性能、存储和可用性方面的限制。DBoriginalfDB1DB2DBnDBoriginal​fDB1​DB2​DBn​其中fff代表拆分函数,决定了数据如何分布到各个子数据库中。垂直拆分是按照业务功能或数据表的关联性,将不同的表拆分到不同的数据库中。这种拆分方式基于业务维度,每个数据库包含完整的业务子集。设原数据库DBDBDB包含表集合TT。 阅读详情

前言

今天和同事聊起一个大家都熟悉的话:“当数据量超过百万级应该怎么优化?”,这时你可能立马会想到:“拆分数据表…”,至于说怎么拆分,接上面话题我说一下我的想法,写的不好,不足之处希望大家指出。

垂直拆分

垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表,例如:把主键和一些常用的列放到一张表,然后把主键和另一些不常用的列放到另一个表中

  • 应用场景
  1. 如果一个表中的某些列常用,而另一些不常用
  2. 可以使数据列减少,提高查询效率
  • 缺点
    管理冗余列,查询所有数据需要关联查询JOIN操作
  • 拆分原则
  1. 把不常用的字段单独放在一张表
  2. 把text,blob等大字段拆分出来放在附表中
  3. 经常组合查询的列放在一张表中
    在这里插入图片描述
    注:垂直拆分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用JOIN关键起来即可

水平拆分

水平拆分是指数据表行的拆分,表的行数超过400万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。

  • 应用场景
    单表记录达条数达到百万级或者千万级时
  • 缺点
    给应用增加复查度,通常查询时需要多个表名,查询所有数据都需要UNION操作
  • 拆分原则
  1. 通常情况下,我们使用取模的方式来进行表的拆分;比如一张有400W的用户表users,为提高其查询效率我们把其分成4张表users1,users2,users3,users4
  2. 通过用ID取模的方法把数据分散到四张表内Id%4+1 = [1,2,3,4]
  3. 然后查询,更新,删除也是通过取模的方法来查询
    在这里插入图片描述
  • 实现
$_GET['id'] = 17,
17%4 + 1 = 2,  
$tableName = 'users'.'2'
Select * from users2 where id = 17;

在insert时还需要一张临时表uid_temp来提供自增的ID,该表的唯一用处就是提供自增的ID

insert into uid_temp values(null);

得到自增的ID后,又通过取模法进行分表插入
注意:进行水平拆分后的表,字段的列和类型和原表应该是相同的,但是要记得去掉auto_increment自增长

  • 另外
  1. 部分业务逻辑也可以通过地区,年份等字段来进行归档拆分

  2. 进行拆分后的表,只能满足部分查询的高效查询需求,这时我们就要在产品策划上,从界面上约束用户查询行为。比如我们是按年来进行归档拆分的,这个时候在页面设计上就约束用户必须要先选择年,然后才能进行查询

  3. 在做分析或者统计时,由于是自己人的需求,多点等待其实是没关系的,并且并发很低,这个时候可以用union把所有表都组合成一张视图来进行查询,然后再进行查询

MySQL专题:数据库垂直、水平拆分 目录 垂直拆分 优点 缺点 水平拆分 总结 数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分,我先讲拆分前需要做的事情: 第一步:采用分布式缓存redis、memcached等降低对数据库的读操作。 第二步:如果缓存使用过后,数据库访问量还是非常大,可以考虑数据库读、写分离原则。 第三步:当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了。 数据库拆分原则:就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分散存放... 阅读详情

相关推荐

波束形成算法:LCMV实现(MATLAB)

阵列信号处理,波束成形,

weixin_43601588的博客 1万+

垂直拆分、水平拆分、分库分表策略、主从复制、读写分离

垂直拆分就是要把表按功能模块划分到不同数据库中,如果你的系统是分布式微服务的架构,那就更好理解了,一般一个微服务对应这一个或多个数据库。比如电商系统一般都会有用户中心、订单、商品等等。用户中心数据库存的都是用户信息相关的,商品数据库存的都是商品相关的数据,订单数据库则是存的订单相关的。...

qq_36929638的博客 4226

vhr 微人事系统安装与部署教程(SpringBoot + Vue 项目实战)

vhr(微人事)是一个开源的人力资源管理系统项目。系统采用前后端分离架构,主要技术栈包括:后端:MyBatis前端:VueElement UIAxios数据库:MySQL系统通常包含以下模块:员工管理部门管理职位管理薪资管理权限管理系统管理整体功能已经接近企业级后台系统。vhr(微人事)是一个非常经典的开源人力资源管理系统项目,基于SpringBoot + Vue 前后端分离架构。系统包含:员工管理部门管理权限管理薪资管理。

m0_69484557的博客 486

关于数据库的水平分割和垂直分割的几点介绍

在数据库操作中,我们常常会听说这两个词语:水平分割和垂直分割。那么到底什么是数据库的水平分割,什么是数据库的垂直分割呢?本文我们就来介绍一下这部分内容。 1、水平分割: 按记录进分分割,不同的记录可以分开保存,每个子表的列数相同。 水平分割通常在下面的情况下使用: A 表很大,分割后可以降低在查询时需要读的数据和索引的页数,同时也降低了索引的层数,提高查询速度。 B...

weixin_33975951的博客 296

Windows10 搭建 FTP 服务器

问题: 有这么一个需求,博主需要对班级同学的信息进行收集,同学的信息是一个个的文件, 正常是每个同学将自己的信息打包压缩通过 QQ 或者邮箱方式发送给博主, 博主一个个接收这些压缩包,然后进行解压,再统一放到一个文件夹下, 但是博主觉得这样子实在是太麻烦了,如果某一个同学的信息来回变动,就需要接收很多次,更改很多次, 另外如果消息过多还会产生漏掉某个同学的信息的问题。 解决方法: 如果可以使...

assiduous_me的博客 3965

从东南大学906被刷到调剂过程(内含个人感想)

介绍了自己在看到初试成绩,到后期复习以及调剂的全过程,当中也包含了自己的复试中的感想,希望大家理性看待。

Philo的博客 2856

数据库和数据库表的水平拆分和垂直拆分

数据库垂直拆分(按照功能模块拆分) 数据库水平拆分(根据某种规则划分,比如对id取余) 数据库表的垂直拆分 数据库表的水平拆分 数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分 第一步:采用分布式缓存redis、memcached等降低对数据库的读操作。 第二步:如果缓存使用过后,数据库访问量还是非常大,可以考虑数据库读、写分离原则。 第三步:当我们使用读写分离、缓存后,数据库的...

Prodigal 5156

爬虫瑞数5.5案例:欧冶钢材交易官网,带后缀K5nOZLud(面向对象补环境)

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。由于之前某通信的瑞数已经调整,这里再出一篇文章,瑞数特点以及请求执行的流程已在之前的文章中分析过,这里不再特别讲解;

老衲爱洗头的博客 3043

通俗易懂:MySQL中如何对表进行垂直拆分和水平拆分?

MySQL中对表进行垂直拆分和水平拆分是为了应对数据量的增长和访问压力增大带来的性能瓶颈,这两种拆分方法分别适用于不同的场景和需求。 ### 1. 垂直拆分(Vertical

pengweid专栏 2199

CLRNet车道线检测模型在Orin Nano Super开发板上的全栈部署与优化实践

本文详细介绍了将CLRNet车道线检测模型部署到NVIDIA Orin Nano Super开发板的全过程。内容包括:1) Orin开发板硬件规格分析;2) JetPack SDK环境配置与Python虚拟环境搭建;3) CLRNet模型架构解析与PyTorch实现;4) 模型转换与TensorRT加速优化方法。通过系统性的环境配置、模型转换和性能优化,为边缘计算场景下的车道线检测应用提供了完整的解决方案,实现了在Orin平台上的高效部署。

huanghm88的专栏 226

【单智能体】AI 数据分析智能体案例讲解(附完整源码)

本案例将引导您构建一个基于 AI 的数据分析智能体,让用户能够通过自然语言查询来分析 CSV 和 Excel 文件中的数据,无需掌握 SQL 知识。该智能体使用 Agno Agent 框架集成 OpenAI GPT-4o 模型,并利用 DuckDB 提供高效的数据处理能力。

rengang66的博客 239

MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从

MySql运维篇---009:分库分表:垂直拆分、水平拆分、通过MyCat进行分片,读写分离:一主一从、 双主双从

aa35434的博客 6598

VSCode 配置 Claude Code 插件的 4 步安装法与 3 类常见报错解决方案

介绍 VSCode 中 Claude Code 插件的 4 步可靠安装流程与 3 类高频报错(上下文丢失、认证失败、加载卡死)的根因分析和精准修复方案,聚焦文件上下文捕获机制、请求头注入要求及缓存失效逻辑,提供可验证的命令行操作与日志定位方法。

weixin_28728443的博客 496

MySQL大表优化方案

MySQL大表优化方案

旷野历程 1422

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

4 单机服务端优化

重复提交优化: js层面,在用户点击提交订单后禁用按钮。 使用Redis incrde 原子性递增计数

qq_37876078的博客 136

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL 的分库分表:垂直拆分与水平拆分的场景选择

在数据库设计与优化中,**分库分表**(Database Sharding)是常见的技术方案,旨在提升数据库的性能、扩展性和可用性。MySQL 作为主流关系型数据库,在高并发和大数据量场景下,往往需要通过**垂直拆分**和**水平拆分**来优化存储结构和访问效率。那么,在实际应用中,如何选择合适的拆分方式呢?本文将详细解析 MySQL 分库分表的垂直拆分与水平拆分,并探讨其适用场景。

1575

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

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

12万+

mysql水平拆分查询_MYSQL水平拆分与垂直拆分

目前很多互联网系统都存在单表数据量过大的问题,这就降低了查询速度,影响了客户体验。为了提高查询速度,我们可以优化sql语句,优化表结构和索引,不过对那些百万级千万级的数据库表,即便是优化过后,查询速度还是满足不了要求。这时候我们就可以通过分表降低单次查询数据量,从而提高查询速度,一般分表的方式有两种:水平拆分和垂直拆分,两者各有利弊,适用于不同的情况。水平拆分水平拆分是指数据表行的拆分,表的行数超...

weixin_34489089的博客 1325

数据表 垂直拆分与水平拆分

不知你有没有面试遇到过,或者工作中遇到过,水平拆分和垂直拆分的题目或需求,其实所有的东西经过思考你就会清楚的,都是不难的,我们先来说一下垂直拆分 垂直拆分 什么叫垂直拆分?为何垂直拆分? 当一个表复杂,难以维护,数据量太大,肯定会想到拆分的啦,比如: 一个数据库里面既存在用户数据,又存在订单数据,那么垂直拆分可以把用户数据放入到用户库,把订单数据放到订单库。垂直分表是对数据表进行垂直拆分的...

HPFBoy的博客 587

mysql按字段拆分表_MySQL 表的垂直拆分和水平拆分

垂直拆分垂直拆分是指数据表列的拆分,把一张列比较多的表拆分为多张表通常我们按以下原则进行垂直拆分:把不常用的字段单独放在一张表;把text,blob等大字段拆分出来放在附表中;经常组合查询的列放在一张表中;垂直拆分更多时候就应该在数据表设计之初就执行的步骤,然后查询的时候用jion关键起来即可;水平拆分水平拆分是指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张...

weixin_39938746的博客 793

关于MySQL垂直分表与水平分表(垂直分库,垂直分表,水平分库,水平分表)

分库分表是什么 下边以电商系统中的例子来说明,下图是电商系统卖家模块的表结构: 通过以下SQL能够获取到商品相关的店铺信息、地理区域信息: SELECT p.*,r.[地理区域名称],s.[店铺名称],s.[信誉] FROM [商品信息] p LEFT JOIN [地理区域] r ON p.[产地] = r.[地理区域编码] LEFT JOIN [店铺信息] s ON p.id = s.[所属店铺] WHERE p.id = ? 随着公司业务快速发展,数据库中的数据量猛增,访问性能也变慢了,优化迫在眉

Sun的博客 3526

Mysql 分表 垂直分割_图文解释 读写分离、垂直拆分、水平拆分、分库分表

1. 前言相信你经常被 读写分离、垂直拆分、水平拆分、分库分表 这几个名词搞得很懵逼。我有时候也很懵逼,那么今天就来把这几个数据库常用术语搞清楚,同时也记录一下。2. 读写分离这个相对比较好理解一些,就是将数据库分为主从库,一个主库(Master)用于写数据,多个从库(Slaver)进行轮询读取数据的过程,主从库之间通过某种通讯机制进行数据的同步,是一种常见的数据库架构。下面这张图就展示了 “一主...

weixin_30249953的博客 1098

mysql 水平拆分 垂直拆分_Mysql的分库分表,水平拆分-垂直拆分

MySQL单库数据量在5000万以内性能比较好,超过阈值后性能会随着数据量的增大而变弱。MySQL单表的数据量是500w-1000w之间性能比较好,超过1000w性能也会下降。mysql的分库分表是在数据量大后的一个常用数据库优化方法mysql单表数据量在500w至1000w之间性能还是可以的,超过1000w性能就会下降,这是在没有字符的前提下,有字符的情况下数据量最好在500w以下简答的举个例子...

weixin_36259939的博客 402

mysql 水平拆分中间件_数据库垂直拆分 水平拆分

2.2.7 读写分离后,数据库又遇到瓶颈通过读写分离以及在某些场景用分布式存储系统替换关系型数据库的方式,能够降低主库的压力,解决数据存储方面的问题。不过随着业务的发展,我们的主库也会遇到瓶颈。我们的网站演进到现在,交易、商品、用户的数据还都在一个数据库中。尽管采取了增加缓存、读写分离的方式,这个数据库的压力还是在继续增加,因此我们需要去解决这个问题,我们有数据垂直拆分和水平拆分两种选择。2.2....

weixin_36180385的博客 156

mysql数据库的水平拆分与垂直拆分

** mysql数据库的水平拆分与垂直拆分 ** 近端时间在面试,发现很多面试官或者面试都把数据的水平拆分合垂直拆分给搞混了,今天特意写了一篇博客来说说水平拆分和垂直拆分希望对程序猿们有所帮助。 数据库水平与垂直拆分: 垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库…这种方式多个数据库之间的表结构不同。 水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,这些数据...

weixin_44407691的博客 216

mysql 垂直分表和水平分表

水平分表 : 数据表行的拆分,通俗点就是把数据按照某些规则拆分成多张表或者多个库来存放。分为库内分表和分库。 比如一个表有400万数据,查询很慢,可以分到四个表,每个表有400万数据 垂直分表: 列的拆分,根据表之间的相关性进行拆分。常见的就是一个表把不常用的字段和常用的字段就行拆分,然后利用主键关联。或者一个数据库里面有订单表和用户表,数据量都很大,进行垂直拆分,用户库存用户表的数据,订单库存订单表的数据。 分库分表方案: 1.取模方案: 拆分之前,先预估一下数据量。比如用.

蛋蛋的博客 2653
上一篇: 关于phpStudy2018开启XDebug无效问题
下一篇: 启动 idea 弹出“Failed to load JVM DLL\bin\server\jvm.dll”错误的解决方法
dadeity
博客等级 码龄10年 1172粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dadeity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值