首页 > 数据库 >彻底理解数据库何时需要分表问题

彻底理解数据库何时需要分表问题

时间:2024-12-18 11:31:15浏览次数:5  
标签:11 字节 1618 int 数据库 何时 分表 数据 节点

在阿里巴巴开发手册中写道:

【推荐】单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

大家在网上肯定看到过很多关于分库分表的情况,很多说到当数据量达到2000W行的时候就需要分库分表了,但是这种单纯抛开容量只谈行数的话肯定是不对。

下面通过一个3层的B+最多可以存储多少数据量来说明不对的原因。

一.B+树知识

首先要知道一个B+数(如果想更仔细了解B+数,可以查看《多路查找树》文档)是由一个一个的磁盘页组成的,每一页的大小可以通过sql语句进行查询(show GLOBAL STATUS like 'innodb_page_size),默认是16k。

二.一页可以存多少数据

1.每一页存储结构如下:

每个页面16KB,应该减去页头和页尾的开销(约200字节),剩下的才是用于存储实际数据。

有效数据空间:16384-200=16184字节。

2.假设目前有一个张表:

CREATE TABLE TEST(
    a int(11) PRIMARY KEY,
    b int(11),
    c int(11),
    d int(11),
    e varchar(20) CHARACTER SET utf8mb4
) ENGINE = InnoDB;

分析:

a列:int(11),占4字节;

b列:int(11),占4字节;

c列:int(11),占4字节;

d列:int(11),占4字节;

e列:Varchar(20),占4n+2字节;

总计:4 + 4 + 4 + 4 + (4x20+2) = 100字节。

此时就可以算出一页存储的数据了,这个表比较小,只是用作举例,实际开发的表肯定比这个大,通过计算可以知道 一页存储的数据 = 16183 / 100 ≈ 161条数据。 

三.3层B+树可以放多少数据

上面说的161条数据,只是一个叶子节点的数据,如果想得到3层B+树能存多少数据,还需知道一共都多少个叶子节点;

非叶子节点是不会存数据的,所以第一层B+数只会存索引(我这里是int类型,占4字节)和执行下一个节点的指针(占6字节),所以在一个索引页里面就会占到10个字节,就可以计算出第一层数据 = 16184 / 10 ≈ 1618个索引加指针;

接着,第二层B+树节点,每个节点也会有1618个索引,根节点是1618个索引加指针,所以也会发散出1618分子节点,所以第二层存储的数据就 = 1618 * 1618 ≈ 2617924个索引加指针;

最后3层B+树总共存储的数据= 2617924 x 161  ≈ 421485764条数据。

如下图:

也就是说一个3层的B+树最多可以存放4亿多条100字节的数据。 

如果说按照每条数据1KB来计算,大约可以存4200W行数据。

总结:

所以说网上流行的2000W条数据就不是标准答案,实际能存多少,是需要根据数据库每行所占大小来计算得出来的。

对于一个B+树来说,3层是一个比较理想的范围,因为只需要经过3次磁盘的IO就可以定位到数据。

所以说2000W只是一个参考值,比如阿里巴巴的500W,可能要是考虑到服务器的性能,以前的磁盘都是机械硬盘,现在都是固态硬盘了,所以说这个数量其实也可以往上进行浮动一些,还有可能也是考虑到数据要进行备份恢复的话,如果单表太大,想要备份恢复的风险也比较大,也不利于备份和恢复。

标签:11,字节,1618,int,数据库,何时,分表,数据,节点
From: https://blog.csdn.net/BestandW1shEs_lsy/article/details/144545218

相关文章

  • 在易优CMS中遇到数据库连接问题时,应该从哪些方面进行排查?
    在使用易优CMS时,如果遇到数据库连接问题,可以从以下几个方面进行排查和解决:检查数据库配置确认配置文件:首先,确保你的数据库配置文件(通常是 config.php 或 database.php)中的数据库连接信息(如主机名、用户名、密码、数据库名)是正确的。常见的配置项包括:php return['......
  • 数据库怎么修改网站密码,深入解析数据库密码管理最佳实践
    要通过数据库修改网站密码,可以按照以下步骤操作:确定数据存储位置:了解您的网站数据存储在哪个数据库中,常见的数据库有MySQL、PostgreSQL等。登录数据库:使用数据库管理工具连接到相应的数据库。找到用户表:在数据库中找到存储用户信息的表,通常包含用户名和密码字段。修改密码:执......
  • 如何修复WordPress数据库错误?
    修复WordPress数据库错误需要采取一系列步骤,确保数据库的完整性和网站的正常运行。以下是一些常用的修复方法:备份数据库:在修复数据库之前,请先备份您的数据库,以防万一修复过程中出现意外。解决方法:使用phpMyAdmin、命令行工具或WordPress插件(如UpdraftPlus、All-in-OneWPMi......
  • T-SQL备份还原SQL Server的数据库
    完整备份与还原备份数据库到指定的位置---完整备份backupdatabaseTest1todisk='D:\backups\Test1.bak'使用备份文件还原数据库--设置单用户模式alterdatabaseTest1setsingle_userWITHROLLBACKIMMEDIATE--还原数据库restoredatabaseTest1fromdisk='D:\ba......
  • 「九」HarmonyOS 5 端云一体化实战项目——「M.U.」应用云侧开发云数据库
    1立意背景M.代表“我”,U.代表“你”,这是一款用于记录情侣从相识、相知、相恋、见家长、订婚直至结婚等各个阶段美好记忆留存的应用程序。它旨在为情侣们提供一个专属的空间,让他们能够将一路走来的点点滴滴,如初次相遇时的心动瞬间、逐渐了解彼此过程中的深入交流、甜蜜......
  • 数据库
    linuxmysql-u-root-p进入数据库操作界面showdatabases查看所有数据库caeatedatabases+创建数据库use+使用数据库showtables显示库里所有表createtable创建表名desc+查看表结构navicatselect*from+查看来自这个表的所有内容插入INSERTINTO表......
  • 数据智能,融合创新|12月中国数据库行业分析报告已发布, 持续为产业助力
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》,持续传播数据技术知识、努力促进技术创新与行业生态发展,目前已更至第二十三期,2023年年度......
  • 毕业设计-基于Java+SpringBoot+Vue宠物领养系统(源码+数据库+项目说明)
    博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及多年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 毕业设计-基于Java+SpringBoot+Vue学生成绩管理系统(源码+数据库+论文+PPT+项目说明)
     博主介绍:本人专注于java/前端/数据库/微信小程序技术领域的开发,以及多年的计算机毕业设计方面的实战开发经验和技术积累;本人也是多年的全栈开发人员;希望我发布的此篇文件可以帮助到您......
  • 【YashanDB知识库】误配置SYSTEM级别的STATISTICS_LEVEL参数为ALL导致数据库性能下降
    本文内容来自YashanDB官网,原文内容请见https://www.yashandb.com/newsinfo/7664890.html?templateId=1718516【标题】误配置SYSTEM级别的STATISTICS_LEVEL参数为ALL导致数据库性能下降【问题分类】数据库性能下降【关键字】STATISTICS_LEVEL数据库性能freebufferwait等待......