美文网首页
mysql索引底层相关数据结构

mysql索引底层相关数据结构

作者: FakeCSer爱去网吧 | 来源:发表于2021-03-16 16:45 被阅读0次
    • 哈希表-不能范围检索

    • 二叉查找树 BST-存在不平衡导致的检索性能降低的问题

    • 红黑树,平衡树但是有“右倾”趋势

    • AVL树:平衡树,数据库查询数据的瓶颈在于磁盘 IO,一次磁盘 IO 只能取出来一个节点上的数据加载到内存里,需要减少磁盘 IO次数

    • b-树(b-树就是b树) 平衡树
      多叉树,一个节点不止一个数据分段向下查询


    B 树用作数据库索引有以下优点:
    优秀检索速度,时间复杂度:B 树的查找性能等于 O(h*logn),其中 h 为树高,n 为每个节点关键词的个数;
    尽可能少的磁盘 IO,加快了检索速度;
    可以支持范围查找。

    • b+树


    B 树和 B+树有什么不同呢?
    第一,B 树一个节点里存的是数据,而 B+树存储的是索引(地址),所以 B 树里一个节点存不了很多个数据,但是 B+树一个节点能存很多索引,B+树叶子节点存所有的数据。
    第二,B+树的叶子节点是数据阶段用了一个链表串联起来,便于范围查找。

    选择b+树作为支持索引的底层数据结构!


    • 索引
      建表的时候Mysql 就会自动建立好主键 ID 索引树

    • MyISAM 引擎:非聚集索引方式

      Myisam 创建表后生成的文件有
      frm:创建表的语句
      MYD:表里面的数据文件(myisam data)
      MYI:表里面的索引文件(myisam index)

      MyISAM 引擎把数据和索引分开了,一人一个文件,这叫做非聚集索引方式。他通过索引定位数据的地址,然后去数据文件中取数据。当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点同样是记录了对应数据的物理地址,然后也是拿着这个物理地址去数据文件里定位到具体的数据记录

    • Innodb 引擎:聚集索引方式

      Innodb 创建表后生成的文件有:
      frm:创建表的语句
      idb:表里面的数据+索引文件
      聚集索引是可以直接找到数据。

    而Innodb 引擎 B+树的叶子节点存储的是主键 ID 对应的数据,当我们为某个字段添加索引时,我们同样会生成对应字段的索引树,该字段的索引树的叶子节点存储的是主键 KEY!拿到主键 KEY 后,InnoDB 再会去主键索引树里找对应的数据

    • select执行中的索引操作

    相关文章

      网友评论

          本文标题:mysql索引底层相关数据结构

          本文链接:https://www.haomeiwen.com/subject/qxorcltx.html