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


     

  • 相关阅读:
    Linux程序地址
    一文读懂 BizDevOps:数字化转型下的技术破局
    【C++语法糖】范围for
    Docker常用命令Top20
    httpclient用法大全
    从零开始自己动手写阻塞队列
    HTML静态网页作业——电影介绍-你的名字 5页 无js 带音乐
    Base64编码相关知识总结
    基于STM32设计的酒驾报警系统
    python實現圖片下載
  • 原文地址:https://blog.csdn.net/qq_35285375/article/details/132892205