为什么建议MySQL在2000W条左右记录分表?这个数量问题并不是绝对的,这是一个相对的数量。在回答这个问题前我们应该先了解MySQL底层是用的什么数据结构来进行数据存储的。
MySQL底层采用的B+树进行的数据存储

InnoDB存储引擎最小储存单元是页,一页大小就是16k。B+树叶子存的是数据,内部节点存的是键值+指针。索引组织表通过非叶子节点的二分查找法以及指针确定数据在哪个页中,进而再去数据页中找到需要的数据.

我们假设主键ID为bigint类型,长度为8字节(int类型,一个int就是32位,4字节),而指针大小在InnoDB源码中设置为6字节,所以就是 8+6=14 字节,16k/14B =161024B/14B = 1170,2层的话既能代表11701170个地址。

我们如果一行记录的数据大小为1k,那么单个叶子节点可以存的记录数 = 16k/1k =16,所以3层的B+树存储的记录在1170117016 = 21902400,大概2千万条记录。

为什么不用4层B+树?
使用4层B+树需要磁盘IO次数增加,数据多了但是影响力了性能,这也是建议数据记录过千万条分表的原因。

这只是个理论的数值,叶子节点的数据量大小不同,3层B+数能存储的条数也不同。那么假如一条数据记录的大小不是1kb呢?还是建议,最多存满3层B+树不是1kb,会让3层B+树的最大数据记录数量发生变化比如一条数据记录5kb 那么一个数据页只能存16kb/5kb≈3条记录。此时3层B+树的最大记录数量为
total=311701170=4,106,700条,410w条记录,远小于2000w条也就是说对于复杂数据记录的单表,建议的最大存储记录要小于甚至远小于2000w条.

为什么建议MySQL在2000W条左右记录分表相关推荐

  1. 1亿条数据如何分表100张到Mysql数据库中(PHP)

    来源:http://www.jb51.net/article/70265.htm 这篇文章主要介绍了当数据量猛增的时候如何把一亿条数据分表100张到Mysql数据库中,需要的朋友可以参考下 下面通过创 ...

  2. php 分表 实战,PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP)

    <PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP)>要点: 本文介绍了PHP实战:1亿条数据如何分表100张到Mysql数据库中(PHP),希望对您有用.如果有疑问,可 ...

  3. mysql 5000万条数据库_1亿条数据如何分表100张到Mysql数据库中(PHP)

    下面通过创建100张表来演示下1亿条数据的分表过程,具体请看下文代码. 当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过 ...

  4. [MySQL]MySQL分区与传统的分库分表(精华)

    传统的分库分表 传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都是普通的表和库. 分库 分库的原因 首先,在单台数据库服务器性能足够的情况下,分库对于数据库性能是没有影响的.在数据库存储 ...

  5. 2天,我把MySQL索引、事务、分库分表、锁、性能优化撸完了!

    Java研发工程师必备技能非MySQL莫属,虽说易学好上手,但应对大厂面试,最容易遭遇滑铁卢.功败垂成的也是它. 上手简单,玩转难,才是这款开源数据库叱咤业界多年的真实写照. MySQL 8.0正式版 ...

  6. 3天,把MySQL索引、事务、分库分表撸干净了!

    前两天看到字节一个老哥写的帖子,提到高阶开发者必须掌握的技能,其中他明确提出了"精通MySQL". 为啥MySQL对开发人员如此重要? 第一,不管你去面试哪家公司,数据库是必问项, ...

  7. mysql增加一条学生记录_Mysql基本操作记录

    # DataBase:Mysql Tool:Navicat# 创建学生信息表create tableStudent ( # 学号作为主键,varchar是可变长字符串 SnoVARCHAR(20) p ...

  8. Mysql数据库数据拆分之分库分表总结

    Mysql数据库分库和分表方式,涉及到mysql数据库相关知识,对mysql数据库分库分表相关知识感兴趣的朋友一起学习吧 分库 场景: 分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法 ...

  9. MySQL运维篇之分库分表

    03.分库分表 3.1.介绍 3.1.1.问题分析 随着互联网及移动互联网的发展,应用系统的数据量也是呈指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不 ...

最新文章

  1. 【我的Android进阶之旅】解决SDK升级到27.0.3遇到的GLIBC_2.14 not found、no acceptable C compiler found in $PATH等问题...
  2. 一个简单的mysql存储过程
  3. python-常见数据类型及其方法
  4. 中年程序员,有哪些关于保护身体健康的知识分享给同行的你?
  5. DataFrame表样式设置(二)
  6. python可变参数和关键字参数位置_python中函数的默认参数和可变长参数如何排列?...
  7. 双层循环嵌套打印矩形 java
  8. 谷歌宣布 Linux Kernel、Kubernetes 0day 漏洞奖励加倍
  9. petshop4.0 详解之五(PetShop之业务逻辑层设计)(转帖)
  10. mysql 定时备份和远程备份脚本
  11. A(AI)、B(BigData)、C(Cloud)通俗介绍
  12. 微信公众号模板消息内容key提取代码
  13. 传奇世界修改服务器时间,《传奇世界手游时长版》测试结束公告
  14. 关于CS模式和P2P模式分发文件速度的思考
  15. gitbook:epub电子书制作教程
  16. 干货!任务型对话中语言理解的鲁棒性测试 |清华刘劼西
  17. WIN11自带微软输入法设置问题 自带键盘版本仍为win10问题、显示繁体问题解决
  18. 活动|美团0.98充10元话费,秒到账,不实名不绑卡,超简单!
  19. 外贸找客户软件:Email Extractor v7.2
  20. PostMan测试接口,出现415报错,Unsupported Media Type

热门文章

  1. redis雪崩、穿透、击穿
  2. [答疑]接收报销数据(费用系统)用例规约
  3. JSP+ssm计算机毕业设计高校教材管理平台的设计与实现4boq6【源码、数据库、LW、部署】
  4. php中解析json时值中包含双引号的问题
  5. 1.从零开始搭建Go语言开发环境
  6. jenkins汉化一部分问题(一半中文一半英文)解决
  7. Linux配置Oracle环境变量
  8. 公司固定资产(车辆)处置的流程以及分录
  9. BCC校验(异或校验-C语言-示例)
  10. javascript 匿名自执行函数