• 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.

    支付宝扫一扫,为女程序员打赏!
    作者:梦幻朵颜
    版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    python3读取chrome浏览器cookies
    python通过Cookie跳过登录验证码
    Python 正则表达式模块 (re) 简介
    python抓取bing主页背景图片
    python的开发环境配置-Eclipse-PyDev插件安装
    Windows环境selenium+Python环境配置
    Java+Jmeter接口测试
    Jmeter接口测试参数化实例图文示例
    Jmeter接口测试实例图文示例
    单元测试-代码覆盖率 EclEmma
  • 原文地址:https://www.cnblogs.com/zhuwenjoyce/p/15072518.html
Copyright © 2020-2023  润新知