关注公众号“AI码师”领取2021最新JAVA面试资料一份

为什么说是两千万呢,为什么不说100万,200万呢?


这个当然不是乱说的,是通过计算得来的,我接下来会在文章里面告诉大家这个数据是如何计算的。

在计算之前,我们先来聊聊mysql底层数据存储结构。

mysql 经常使用的存储引擎是Innodb,数据结构算法用的基本都是B+ tree,当然熟悉mysql同学肯定知道除了B+ tree之外,mysql使用数据结构算法还有hash等,不过文章中的计算方式主要是针对b+ tree这个数据结构的存储方式。

我们看下B+ tree到底长什么样?

  • b+ tree 一般深度为3

  • 其中叶子节点存储了所有节点信息

  • 数据都是存储在叶子节点

  • 叶子节点通过双向链表进行连接,并且是按顺序进行排序

知道了b+ tree长什么样之后,我们再看mysql是如何进行查找数据的?

假如我们想找id为21的数据:

  • 首先加载第一页的数据

  • 可以定位到数据在18-30部分,找到指针A

  • 然后根据指针A对应的内存地址,加载对应页面内存数据到内存中

  • 然后再定位到数据在20-22部分,找到指针E

  • 直接加载E对应内存地址的数据

  • 最后定位到id为21对应的数据

可以看出,在mysql中定位一个数据,最多查找3次,就能找到对应的数据,可见B+ tree的数据结构是多么强大?

说了这么多,我们好像还没有进入今天的正题哦。

那到底2000万的数字是怎么计算出来的呢?

在mysql中,将一个大节点作为一页,mysql每次加载一页数据到内存中

页大小被定义为16KB,这是mysql建议的数值,也可以进行配置。

mysql把这样一对数据称为小节点,小节点的数据占用空间可以这么计算

  • 【18】 主键节点 整型 8B(8字节)

  • 【A】指针节点,内存定址最大范围为6B

  • 加起来6B+8B = 14B

那么一个大节点可以存储多少个小节点呢?

小节点数量:16KB/14B = 1170

那这么计算下来:

  • 第一层 存储1170个小节点

  • 第二层 每个小节点又存储1170个节点,总共 1170*1170

  • 第三层 因为第三层存储有数据,不需要存储指针地址,计算方式与前两层不一样

    • 【主键节点】8B

    • 【1kB】预估这么多,已经算很大了

    • 8B相当于1KB可以忽略

    • 所以一个小节点可以存储 16KB/1KB =16 条数据

    • 最终总的存储数据条数为:1170 * 1170 * 16=21902400(2000万)

    看到最后,大家应该知道2000万的数值是怎么计算的了!!!

福利大放送

关注微信公众号“AI码师”,领取面试资料和最新全套微服务教程

备战BAT面试-死磕mysql|mysql 是如何做到存储两千万数据毫无压力的?相关推荐

  1. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案 1

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:王帅 来源地址:https://yq.aliyun.com/ ...

  2. 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  3. 干 MySQL 两千万数据的大表优化解决过程,三种厉害的解决方案

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  4. 【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...

    问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...

  5. MySQL两千万数据优化迁移

    最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...

  6. Mysql学习总结(35)——Mysql两千万数据优化及迁移

    最近有一张2000W条记录的数据表需要优化和迁移.2000W数据对于MySQL来说很尴尬,因为合理的创建索引速度还是挺快的,再怎么优化速度也得不到多大提升.不过这些数据有大量的冗余字段和错误信息,极不 ...

  7. mysql 取差值_mysql计算两条数据差值,求大神解答

    1.创建3张表: CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `warter` int(11) DEFAULT NULL, `r ...

  8. Mysql 查询满足条件 相邻的两条数据(场景:上一篇、下一篇)

    select * from t_zhy_XX where id in (select case when SIGN(id-?1)>0 THEN MIN(id) when SIGN(id-?1)& ...

  9. 为什么大家说 MySQL 数据库单表最大两千万?依据是啥?

    故事从好多年前说起. 想必大家也听说过数据库单表建议最大两千万条数据这个说法.如果超过了,性能就会下降得比较厉害. 巧了.我也听说过. 但我不接受它的建议,硬是单表装了 1 亿条数据. 这时候,我们组 ...

  10. mysql查询前段时间_没想到!我在简历上写了“精通MySQL”,阿里面试官跟我死磕后就给我发了高薪offer...

    事情是这样的 前段时间面试了阿里,大家也都清楚,如果你在简历上面写着你精通XX技术,那面试官就会跟你死磕到底. 我就是在自己的简历上写了精通MySQL,然后就开启了和阿里面试官的死磕之路,结果就是拿到 ...

最新文章

  1. 法学教授:洋文凭情结是对教育体制的嘲弄
  2. VTK修炼之道38:图像平滑_中值滤波器
  3. vue router html后缀,vue-router.html
  4. python绘图函数m_Python散点图。m的尺寸和样式
  5. python网络爬虫系列(0)——爬虫概述 http协议复习
  6. android 开源 高斯模糊_Android图像处理 - 高斯模糊的原理及实现
  7. 管家机器人先生txt_《管家机器人先生》(主角墨青如玉)大结局全文阅读
  8. 原生JS、jQuery 遍历方法总结
  9. ElasticSearch.js源码走一个大概
  10. 在ORACLE中找出并批量编译失效的对象
  11. JS 初级 二(接上)
  12. flash人物原地走路_Flash怎么制作一个行走的小人动画?
  13. C++ Windows键盘钩子
  14. 辽宁教师计算机能力提升,辽宁省中学教师信息化教学能力的现状分析与提升策略研究...
  15. 如何正确判断USB等接口的接线顺序
  16. [5GC]《5G核心网-赋能数字化时代》| 6.4高效的用户面连接机制
  17. 重新启动SQLSever服务
  18. DHT11(ASAIR)温湿度传感器的使用(软件)
  19. 最有前景的RPO数字化趋势来到了,工作系统是怎么逆袭的?
  20. Oracle文件介质损坏的修复方法

热门文章

  1. 红米6pro刷机教无人直播包教程
  2. Excel对于筛选后单元格进行“复制”与“粘贴”
  3. html下拉框选择日期,javascript实现日期三级联动下拉框选择菜单
  4. Google检索技巧大全
  5. 谷歌地图地名显示繁体字_谷歌地图卫星地图怎么取消地名还有路线
  6. 第九届“泰迪杯”数据挖掘挑战赛C题-建模思路参考
  7. Visio应用视频教程(上)-游峰-专题视频课程
  8. 图像分割之(五)活动轮廓模型之Snake模型简介
  9. rtl8169网卡驱动linux,Realtek RTL8110/RTL8169网卡驱动7.005 For Win7
  10. java 网站计数器_网站计数器——Java实现