水平分表与垂直分表

mycat 垂直分库与水平分表使用详解 阅读详情

1. 水平分表


(1) 什么是水平分表
水平分表就是指以行为单位对数据进行拆分,一般意义上的分库分表指的就是水平分表。
分表之后,所有表的结构都是一样的。


(2) 为什么要水平分表
水平分表可以解决表中的数据量大的问题,如果一张表的数据太多,操作起来会很麻烦,所以分表存储数据。


(3) 如何进行水平分表
一般可以有范围法和hash法来进行水平分表。
假设现在有30万行数据,需要对它们进行水平分表:
范围法很好理解,可以让第1-100000行数据存放在表1,第100001-200000行数据存放在表2,第200001-300000行数据存放在表3,就完成了水平分表。
hash法也不难理解,就是选择一个合适的hash函数,比如说使用取模操作(%),把%3结果为0的数据存放在表1,结果为1的存放在表2,结果为2的存放在表3即可。


2. 垂直分表


(1) 什么是垂直分表
垂直分表就是把一张表按列分为多张表,多张表通过主键进行关联,从而组成完整的数据。
分表之后,每张表的结构都不相同。
(2) 为什么要垂直分表
这主要跟某些数据库的引擎有关,比如Mysql的InnoDB引擎。

在Mysql中,数据的基本单位,称为行 (Row)
管理数据的基本单位,称为页 (Page)
保存页的单位,称为区 (Extent)

一个区由连续的页组成,一个页由连续的行组成
默认每一个区的大小为1M,默认每一页的大小为16K,所以一个区有1024 / 16 = 64个页
而每个页中,根据每行数据的大小,又可以存储多个行
然而,在InnoDB 1.0版本之后,引入了一个新特性:压缩页
被压缩之后的页在实际占用空间上,比逻辑上的要小,但是在压缩和解压缩时会花费额外的时间
这时如果出现了跨页检索数据,效率就会比较低
因此,在表设计时,尽可能的在页内多存储数据行,这样可以减少跨页检索,提高效率。
而多存储数据行就意味着,每一行的列数要尽可能少。


(3) 如何进行垂直分表
如果直接每个表就只存储一两列的话
这样做不仅会造成表过多,而且会产生大量重复字段(比如主键),在查询时还需要不断地进行多表关联
所以,如何进行垂直分表还是有技巧的。
一般来说,垂直分表并不会把列平分到2个表中,而是会将一些重要的字段单独剥离成小表,把剩余的不太重要的字段放在大表中。
比如,把查询、排序时需要的字段,高频访问的小字段放在小表
而把低频访问字段以及一些大字段放在大表中

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路 本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。 阅读详情

相关推荐

【Milvus】实战指南:利用milvus-backup实现高效数据备份与恢复

本文详细介绍了如何利用官方工具milvus-backup为Milvus向量数据库实施高效的数据备份与恢复。文章从备份的必要性出发,逐步讲解了环境准备、配置要点、全量与按需备份操作,以及恢复数据的关键步骤和验证方法,旨在帮助用户构建可靠的数据安全防线,应对误操作或系统故障风险。

weixin_29217235的博客 131

水平分表

概述 当一个表的数据很大,比如200G,这时太大,我们只靠索引也不好使了,这时我们需要分表和分区处理。分表有两种形式(水平分表和垂直分表)。 一、水平分表   核心思想:把一个大表,分割N个小表,小表和大表结构一样,只是把数据分散到不同的表中。 简单例子:比如说是通过ID直接登录(例如QQ号),可以直接使用下面的例子 每次登录验证的时候只要把传过来的Id...

不求前途凶吉,但求落幕无悔! 6459

OpenSees入门指南:从零开始的环境配置与TCL脚本实战

本文提供了一份详细的OpenSees入门指南,涵盖从零开始的环境配置到TCL脚本实战的全过程。文章重点讲解了OpenSees的安装步骤、环境变量设置,并推荐了高效的VS Code集成开发环境配置方法。通过一个简支梁分析的完整TCL脚本示例,手把手引导读者完成第一个非线性有限元分析,帮助土木工程与结构工程领域的研究者与学生快速上手这一强大的开源分析工具。

weixin_28829339的博客 336

垂直分表、水平分表详解

垂直分表就是把一张表按列分为多张表,多张表通过主键进行关联,从而组成完整的数据。分表之后,每张表的结构都不相同。垂直分表不需要额外引用其他组件,需要到Repository层面建立好表映射即可。水平分表就是指以行为单位对数据进行拆分,一般意义上的分库分表指的就是水平分表。分表之后,所有表的结构都是一样的。水平分表需要额外引入中间主键完成,例如shardingSphere等。

ALONG的博客 3386

ADRV902x射频评估实战:手把手教你用TES GUI生成ARM bin与JESD204C配置文件

在射频前端系统设计中,ADRV902x系列收发器凭借其宽带性能和灵活配置能力,已成为5G基站、微波回传等场景的核心器件。然而当工程师面对非官方硬件平台时,如何高效利用Transceiver Evaluation Software(TES)完成关键配置,成为项目推进的第一道门槛。本文将彻底解析脱离ADS9母板后的完整离线工作流,从参数预设到文件生成,手把手解决真实工程中的配置痛点。在Demo模式下,所有硬件状态检测都会被跳过,但配置文件生成功能完全可用。作为基础模板,因其配置最为简洁,便于后续自定义修改。

weixin_33704591的博客 429

如何在Vitis 2023.1上快速搭建LWIP Echo Server(附YT8521S PHY调试心得)

本文详细介绍了在Vitis 2023.1开发环境下,基于Xilinx MPSoC平台快速搭建LWIP Echo Server的完整实战流程。内容涵盖从Vivado硬件工程配置、Vitis软件工程创建,到关键代码剖析与定制化修改,并重点分享了调试非标准PHY芯片(如YT8521S)的宝贵心得与常见问题排查方法,旨在帮助开发者高效实现FPGA与上位机间的可靠网络通信验证。

weixin_29250403的博客 136

MySQL水平分表原理讲解

什么是水平分表? 当一张表到达一定的数据量后(如500万条数据),索引的成本也随之增加,使用主键索引查找数据时也显得十分吃力,数据检索效率低。 水平分表是将一个数据量大的表按照一定的规则拆分成多个结构相同的表,将数据分散到拆分出来的表中。拆分后,当我们查找某条数据时,只需要按照拆分表时的规则推断出需要查询的数据具体存在哪一张表中,到对应的表查找数据即可。 下图是按照时间作为规则水平拆分表的示例: 常见的水平分表方案 1.按时间拆分 像上图中的拆分示例,采用的是按照年份水平拆分表的方案,除此之我们还

云丶言的博客 4581

静态时序分析—门控时钟检查(clock gating check)

clock gating check的条件与类型

m0_61544122的博客 9606

【DataBase】数据库的水平(分库)分表和垂直(分库)分表到底是什么?

简单来说就是水平分表根据数据的条数进行分表,垂直分表是按照字段进行分表

m0_64210833的博客 4103

IEC 104电力规约详细解读(一) - 报文结构、报文分类、ASDU

比如,双方可以按频率发送,比如接收8帧I帧回答一帧S帧,也可以要求接收1帧I帧就应答1帧S帧,当然也可以不要求(S帧内容示例参考例1)。所以U帧格式的控制欲第一个字节就只有6种情况,分别是0x83(TESTER确认)、0x43(TESTER命令)、0x23(STOPDT确认)、0x13(STOPDT命令)、0x0B(START确认)、0x07(START命令)ASDU(应用服务数据单元),协议原文格式最好去101协议去看看,会比较详细。遥信、遥测、遥控、遥调、总召、对时等都需要使用I格式传送。

张二狗的博客 1万+

【SA8155P】AIS Camera相关内容的简单介绍

【SA8155P】AIS Camera相关内容的简单介绍

静谧、淡雅 1700

分库分表方式介绍

垂直分表就是在同一数据库内将一张表按照指定字段分成若干表,每张表仅存储其中一部分字段;垂直分表拆解了原有的表结构,拆分的表之间一般是一对一的关系;​ 垂直分库是指按照业务将表进行归类,然后把不同类的表分布到不同的数据库上面,而每个库又可以放在不同的服务器上,它的核心理念是-专库专用;水平分表就是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中,表的结构没有变化;水平分表解决单表数据量大的问题;

几许的博客 1995

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1549

mysql水平分表 垂直分表_Mysql的水平分表与垂直分表的讲解

在我上一篇文章中说过,mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)水平分表: 如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就...

weixin_39958559的博客 255

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Micro框架数据库分表实现:水平分表与垂直分表

你是否在使用Micro框架开发时遇到数据量激增导致的性能瓶颈?随着用户规模扩大,单表数据量可能达到百万甚至千万级别,查询效率显著下降。本文将通过实际案例和代码示例,详细讲解如何在Micro框架中实现水平分表与垂直分表,解决数据库性能问题。读完本文,你将掌握分表策略的选择方法、实现步骤以及在Micro框架中的最佳实践。 ## 分表策略概述 数据库分表(Sharding)是解决大数据量表性能问题的...

gitblog_00929的博客 742

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

关于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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数据库分库分表:Sharding-JDBC 水平分表与垂直分库实践

问题 1:分片键选择不当导致热点?解决方案:使用复合分片键(如),或采用范围分片算法。问题 2:分库分表后 ID 冲突?解决方案:使用分布式 ID 生成器(如 Snowflake 算法),其公式为: $$ \text{ID} = \text{时间戳} \ll 22 + \text{机器ID} \ll 12 + \text{序列号} $$避免全表扫描:分片键应覆盖常用查询。结合缓存(如 Redis)减少数据库压力。定期数据归档,删除历史数据。

gdfsdfsad的博客 860

mysql数据库的水平分表与垂直分表实例讲解

mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解) 水平分表: 如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的ta...

weixin_34324081的博客 140

mysql的水平分表与垂直分表

        在我上一篇文章中说过,mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)        水平分表:            如上图所示:另外三张表表结构是一样的  只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都...

DreamBoyMrsLin的博客 1173

mysql 垂直_Mysql的水平分表与垂直分表的讲解

在我上一篇文章中说过,mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)水平分表:如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一...

weixin_42449583的博客 1164

mysql垂直分表例子_mysql数据库的水平分表与垂直分表实例讲解

mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)水平分表:如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的table_na...

weixin_33323907的博客 459

如何应对MySQL单表数据量过大:垂直分表与水平分表策略解析

话接上回,单表最大数据建议两千万,那如果开发一个项目,预计注册量达到一个亿怎么办。单表内放这么多数据,MYSQL底层B+树的层级结构就可能会变得很高,磁盘io次数变多,性能会大幅度降低。所以考虑数据库分表。这里的分表分为垂直分表和水平分表两种。

weixin_62647396的博客 861

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

本文介绍数据库的分库分表的方案:垂直分表与水平分表。

IT利刃出鞘的博客 5547

mysql水平分表_mysql数据库的水平分表与垂直分表实例讲解

mysql语句的优化有局限性,mysql语句的优化都是围绕着索引去优化的,那么如果mysql中的索引也解决不了海量数据查询慢的状况,那么有了水平分表与垂直分表的出现(我就是记录一下自己的理解)水平分表:如上图所示:另外三张表表结构是一样的 只不过把数据进行分别存放在这三张表中,如果要insert 或者query 那么都需要对id进行取余 然后table名进行拼接,那么就是一张完整的table_na...

weixin_31785177的博客 627
上一篇: 乐观锁与悲观锁
下一篇: JWT_token是什么
ZhJch-
博客等级 码龄5年 10粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值