mysql索引原理详解

一、索引概念

  索引的本质就是不断缩小想要查找到的数据的范围来筛选想要的结果,同时吧随机事件变成顺序事件

二、磁盘中的一些概念

  扇区:磁盘存储的最小单位,一般为512Byte

  磁盘块:文件系统与磁盘交互的最小单位 

  mysql中的页:与磁盘交互的最小单位,mysql内部的数据结构,大小为16kb,一个页中有4磁盘块,

  mysql每次从磁盘中读取数据默认最小是16kb,要么不读,读了就是16kb,大小可以修改

三、B+树

  

   m阶B+树特征:

          1.每个节点之多m个子女(根据上图来说,就是每个节点最多有3个数据页子女)

          2.有K个节点的关键字必有k个子女(拿数据页2来说,有2个关键字,就有开个数据页子女)

          3.每个父节点都含有指向子节点的指针

          4.父节点的关键字在子节点中存在,要么取子节点最大值,要么最小值,如果子节点是升序排列,则父节点关键字取最小值

          5.最底层是叶子节点,只有叶子节点保存数据,其他节点只保存指针和关键字

          6.叶子节点保存着所有关键字和数据,叶子节点之间还用指针连接

四、mysql的存储引擎和索引

  mysql内部索引是由不同的引擎实现的,主要说一下InnoDB和MyISAM这两种引擎中的索引,这两种引擎中的索引都是使用b+树的结构来存储的

  1.innodb中的索引

    主键索引(聚集索引):每个表只有一个主键索引,叶子节点记录着主键和数据记录

    辅助索引(非聚集索引):叶子结点记录着主键的值和索引字段的值

     

              id为主键索引,name为辅助索引

    

     检索过程

      1.将每行的数据排序,存储到叶子节点,生成枝节点和根节点 完成主键索引

      2.辅助索引的建立;创建辅助索引后,将创建索引那列同主键拿出来,排序,存储到枝节点和根节点

      3.要检索id=14那列只需在主键索引里检索即可

      4.要检索name = ‘Eillsion’ 要俩步

        (1)在辅助索引中检索到name = ‘Eillsion’获取id值

        (2)根据id值再在主键索引中检索

   2.myisam存储引擎中的索引

    不管是主键索引还是辅助索引结构都是一样的,叶子节点保存了索引字段的值以及数据记录的地址。

    

     检索过程;

          1.在索引中找到对应的关键字,获取关键字对应的地址

          2.通过记录的地址查到相对应的数据记录

五、页结构

  1.B+树叶子页之间间双向链表连接,能够实现范围查找

  2.页内部数据记录用单向链表连接,方便查找

  3.为了加快页内数据查找,在页内部加入了 稀疏索引,也叫页目录

  总体来说mysql的索引 用到了B+树,链表,二分查找,能快速查找

 参考文章;https://www.cnblogs.com/itsoku123/p/11660053.html

原文地址:https://www.cnblogs.com/shi-san/p/13432565.html