美文网首页
MySQL数据库索引

MySQL数据库索引

作者: 小闹斧 | 来源:发表于2019-08-25 21:42 被阅读0次

    前几天看了一个mysql索引的视频,一直没有整理,今天突然想到在博客中记录一下,仅做自己记录整理用,如果对您有帮助那再好不过!

    什么是索引?

    索引是帮助mysql高效获取数据的排好序的数据结构

    例如有如下的表:

    如果索引的数据结构是二叉树的话,索引在col2上,那么可能是这种情况:

    如果索引的数据结构是二叉树的话,索引在col1上,那么就是这种情况:

    成为了这种线性结构,二叉树的深度是不可控的,这样会增加磁盘I/O的次数,降低查询效率。那么我们用红黑树替代

    虽然红黑树能够自动平衡,但是实际上树的高度还是不能够控制。这时候就用到了B-tree

    类似这种,将节点的容量扩大,从而达到降低树的深度的目的来减少I/O操作。将节点数据读取到内存中查找远比一次I/O的时间少。B-tree的特点就是每层节点数目非常多,层数很少。但是每个节点都是data域(指针)这无疑增大了节点大小,增加了磁盘I/O的时间,那么接下来就是mysql最终确定的B+tree,B+tree将所有的data都放到了叶子结点上

    B+tree在不同引擎下的表现

    MyISAM索引实现,MyISAM索引文件和数据文件是分离的

    .frm -->表结构;

    .MYI-->索引数据;

    MYD-->数据

    InnoDB索引和数据在一起

    .frm-->表结构;

    .ibd(index,data)

    Innodb必须有主键,推荐使用整型。如果建表没有建,mysql也会主动建。

    为什么要用整型?

    1、在查找索引比较大小时,整型要比字符串更方便;

    2、字符串不管是在磁盘中还是内存中都要比整型更占内存;

    为什么自增?

    好维护索引数据。新增一条数据,如果不是自增会发生裂变

    索引数据结构如果采用hash,用hash表存储索引与数据的对应关系,查找更快,但是当条件出现范围,如>用不到索引

    如果内容对大家有所帮助,感谢大家打赏鼓励!

    相关文章

      网友评论

          本文标题:MySQL数据库索引

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