zoukankan      html  css  js  c++  java
  • mysql5.7一颗B+树可以存放多少行数据?为什么使用B+树而不是B树?

    一颗B+树的层高最好控制在3层之内,到第4层性能会急剧下降。

    计算机存储数据时,一个扇区512KB,一个文件是4KB,innodb存储一页是16KB,innodb的所有文件大小一定是16KB的整数倍,一定是16384 byte的整倍数。

    一个叶子节点有多少字节可以存放指向下一节点的指针,取决于主键的类型,比如bigint是8字节,而指针又占用6字节,所以指针可以指向1170个非叶子节点: 

    16384 / (8+6)= 1170 个非叶子节点

    同理,指向叶子节点的个数也可以是1170个,那么3层高的一颗B+树可以存储:

    第一层指向1170个非叶子节点,第二层再指向1170个叶子节点,1170 * 1170 = 1368900 个叶子节点

    那么假设一条记录1KB大小,那么一页16KB就可以存储16行,那么 16行 * 1368900 个叶子节点 = 21902400 行。

    【结论】

    在每行数据是1KB的情况下,3层高的B+数可以存放2190万多条数据。

    【为什么mysql使用B+树?而不是B树?】

    因为B树的非叶子节点也存储数据,而B+树只有在叶子节点才存储数据,所以B树因为存放了数据,所以能放指针的地方就变少了,那要保存同样多的数据,就一定要增加树的高度,如果运气好,那么可能在中间的叶子节点就能找到,如果运气不好,那么需要找很多节点才能找到,这个性能是不稳定的。

    【HashMap适合做数据库索引吗?】

    1、数据量很大的时候hash冲突也很大

    2、不支持排序

    3、不支持range范围取值

    【密集索引和稀疏索引】

    如果这个索引树上不仅有指定的索引列的值,还有其他列的值,那么就是密集索引,比如主键索引。

    只保存了构成了索引的列,比如组合索引a,b,c,那么该索引树只包含了a,b,c三个列的值,没有保存其他更多列的值,就是稀疏索引,那么所有二级索引都是稀疏索引。

    【mysql合并sql语句】

    insert into t1 values(...),(...),(...); 合并了sql语句

    end.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    gulp使用技巧-删除node_modules文件夹,解决目录层次太深删除报错的问题
    PHP学习-链接数据库
    教程笔记《JavaScript深入浅出》
    读书笔记《高性能网站建设指南》之雅虎军规
    CSS3边框图片-像素虚边的问题
    WebStorm设置手机测试服务器-局域网内其他设备访问
    gulp的安装和使用
    H5canvas赛车游戏-基于lufylegend引擎
    WebStorm设置左侧菜单栏背景色和样式
    基于jquery的-获取短信验证码-倒计时
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/15072518.html
Copyright © 2011-2022 走看看