首页 > 数据库 >为什么mysql单表行数建议不要超过2000w?

为什么mysql单表行数建议不要超过2000w?

时间:2022-11-01 12:56:27浏览次数:52  
标签:1280 记录 16kb 存满 单表行数 2000w 内存 mysql

mysql使用innodb的B+树存储表项,保存在.ibd文件中,其中叶子节点页存储数据页,非叶子节点页存储索引页
.ibd文件的一页大小16kb,其中有15kb存记录。
假设每页的记录都存满一页:
1.非叶子节点存索引记录,一条记录4字节主键8字节页号共12字节,一页能存15*1024/12=1280条记录,所以B+树是1280叉树
2.叶子节点存数据记录,假设一条记录1kb,一页能存15/1=15条记录
3.假设存满2层的B+树:

综合1、2、3,此时,能存的最大记录数量为
total=15*1280^(2-1)=19200条记录
如果存满3层B+树,total约=2450w条记录
刚好约等于2000w条

接下来咱看看,存满2层b+树,把所有索引页加载到内存,要占多少内存:
1280*16kb=20480kb

如果内存要完全存3层B+树的索引表需要
1280*1280*16kb=26214400kb的内存

如果内存要完全存4层B+树的索引表需要
1280*1280*1280*16kb=33554432000kb的内存
可以发现,3层B+树,数据库缓冲区就基本不够了,必须要进行磁盘io
而这个磁盘io时间就是增加单标查询时间的罪魁祸首

再思考,假如一条数据记录的大小不是1kb呢?
也是只建议,最多存满3层B+树
不是1kb,会让3层B+树的最大数据记录数量发生变化
比如一条数据记录5kb 那么一个数据页只能存15kb/5kb=3条记录
此时3层B+树的最大记录数量为
total=3*1280^(3-1)=4915200条
也就是说
对于复杂数据记录的单表,建议的最大存储记录要小于甚至远小于2000w条,当然具体合理的值是多少,要具体计算

标签:1280,记录,16kb,存满,单表行数,2000w,内存,mysql
From: https://www.cnblogs.com/lovecodingforever/p/16847310.html

相关文章

  • mysql数据库表映射实体类
     分享知识传递快乐JDBC连接数据库;通过配置文件连接数据库;反射指定表生成实体类;反射当前数据库下所有表生成实体类;类名、属性名、get/set方法名都采用驼峰命名类名注释、属......
  • mysql id为string类型 不能自增 新增的时候这个该怎么办?
    当一张表的主键id是string类型的,并且不能自增新增的时候可能就会一直报错这个时候该怎么办呢?使用UUID  把这个id放到对应的地方就行了。......
  • CentOS7 通过YUM安装MySQL5.7
    2进入到目录/usr/local/中:cd/usr/local/3创建目录/usr/local/tools,如果有则忽略: mkdir-ptools4创建/usr/local/mysql目录,如果已存在则忽略:mkdir-pmysql5进入......
  • mysql8 清理general_log.csv日志文件
    今天mysql看磁盘空间不足,排查出来general_log.csv占了800G  1.功能如下:开启general_log,会将所有到达MysqlServer的SQL语句记录。一般不会开启开功能,因为log的量会......
  • 「MySQL高级篇」MySQL之MVCC实现原理&&事务隔离级别的实现
    大家好,我是melo,一名大三后台练习生,死去的MVCC突然开始拷打我......
  • MySQL执行计划EXPLAIN
    目录1.id2.select_type3.table4.type5.possible_keys6.key7.key_len8.ref9.rows10.filtered11.extra参考文章1.idsql语句的执行顺序查询的sqlEXPLAIN......
  • mysql InnoDB事务
    参考书籍《mysql是怎样运行的》以及极客时间《mysql实战45讲》本文总结事务相关的概念,事务相关的命令等,具体持久性,原子性,隔离性如何实现,会在后续的学习中进行补充系列......
  • Mysql 数据不能回滚,删除有外键约束的数据
    数据不能回滚:SHOWVARIABLESLIKE'autocommit';//查看是否自动提交setautocommit=OFF;//关闭自动提交altertableTRIPLEGengine=innodb;//设置当前表的引擎为......
  • MySQL快速入门
    MySQL快速入门1.初识MySQLJavaEE:企业级Java开发、Web前端(页面:展示——数据);后端(连接点:连接数据库JDBC,连接前端——控制视图跳转和给前端传递数据);数据库(存数据,Txt,Excel......
  • Linux源码安装MySQL
    在Linux中源码安装MySQL​​A、必备条件​​​​a>CMake​​​​b>Boost​​​​c>Mysql​​​​B、安装详情​​​​a>添加mysql用户​​​​b>配置mysql预编译参数​​​......