• MySQL(1) 索引结构


    1、索引结构
    索引概念:是帮助mysql高效获取数据的排好序的数据结构

    2、MySQL为什么用B+Tree
    为什么不用二叉树,单边增长
    为什么不用红黑树,树的高度不受控制
    为什么不用B-Tree,为了节省空间
    为什么不用Hash表,Hash不支持范围查询

    B+Tree结构特点:
    非叶子节点不储存Data,只储存索引(冗余),可以放更多的索引
    叶子节点包含所有索引字段
    叶子节点用指针链接,提高区间访问的性能
    B+Tree结构的特点决定
    因为mysql数据是存在磁盘上的,查询磁盘消耗性能的最大因素就是磁盘IO,为了能减少磁盘IO,就要
    尽量少的操作就能完成查询,B+Tree怎么能满足这个条件呢,他不像二叉树,一个节点只有一个元素,
    B+Tree默认一个节点16kb大小,可以存储多个索引元素,而且只有叶子节点才会存数据,非叶子节点
    只存储索引和指向下一个元素的指针,这样就降低了索引树的高低,减少IO次数
    可以预估一下,B+Tree 3层树高低大概能存多少元素,假设,主键索引用8个字节,指针6个字节,
    一个页默认 16kb
    第一层,可以储存 16kb/(8+6)b = 1170
    第二层,一样 是 1170
    第三层,包括Data,一般一条数据不会超过1kb,就是 16
    三层一共是  1170*1170*16=21902400

    3、B-Tree与B+Tree的区别
    B+Tree只有叶子节点存放Data
    B+Tree索引数据做了冗余,非叶子节点存了所有的索引数据
    B+Tree非叶子节点之间有双向指针(B+Tree只有单项指针,mysql优化为双向),而B-Tree没有

    4、Mysql主键为什么建议用整型的自增主键
    1、如果表中没有主键,mysql会找到唯一索引列作为主键,如果也没有,会有一个隐藏列作为主键
    2、因为mysql索引是排好序的,如果不是自增主键,mysql会发生页的分裂和重平衡
    3、整型的原因是储存小,索引查询快

    5、为什么非主键索引的叶子节点存储的不是Data,而是主键值
    为了保证数据一致性和节省储存空间

    6、为什么索引会有最左前缀原则
    因为索引是排好序的结构,如果不遵循最左前缀原则,查询的数据会全表扫描才能查询到所需要的数据


     

  • 相关阅读:
    Unity实战篇 |制作一个跟随鼠标转向的 简易箭头指示标,包括 UI指向 和 3D指向标
    【BLIP/BLIP2/InstructBLIP】一篇文章快速了解BLIP系列(附代码讲解说明)
    【音视频开发之起始】
    北极星Polaris+Gateway动态网关配置!
    Vulnhub | DC: 7 |【实战】
    nginx做白名单和限流
    EMR 集群时钟同步问题及解决方案An error occurred (InvalidSignatureException)
    Java 对实例进行深拷贝操作
    优维低代码实践:应用级配置
    玩转ChatGPT:参考文献速查
  • 原文地址:https://blog.csdn.net/qq_35285375/article/details/132892205