美文网首页
MySQL中的InnoDB索引

MySQL中的InnoDB索引

作者: 慢游世界 | 来源:发表于2020-01-05 23:11 被阅读0次

为什么是B+树?

在MySQL的InnoDB存储引擎中,索引的数据结构是B+树B+树是一棵N叉树,在总结点数不变的情况下,当N越大,树高会越矮。以int型为例,这个N大概是1200。当树高是4的时候,就可以存1200的3次方个值,大概是17亿。在这棵B+树上检索一个值最多只需访问4次磁盘(值是保存在叶子节点上的,从根节点到叶子节点总共要访问4个节点,每访问一个节点相当于访问一次磁盘)。所以B+树能很好的减少磁盘的访问次数。

索引的类型

在InnoDB存储引擎中,根据叶子节点保存的内容,索引分为聚簇索引二级索引。聚簇索引的叶子节点保存的是整行数据,InnoDB中主键索引就是聚簇索引,二级索引的叶子节点保存的是主键的值。当使用二级索引进行查询的时候,如果要返回的字段不在二级索引中,还要在找到叶子节点后根据主键去主键的聚簇树获取其他的字段信息,此过程称为回表

最左前缀匹配原则

如果创建了联合索引,会遵循最左前缀匹配原则来使用这个索引。假如在表test中有联合索引(a,b,c),以下三个SQL都会用到该索引:

  • select * from where a = ?
  • select * from where a = ? and b = ?
  • select * from where a = ? and b = ? and c = ?

覆盖索引

假如索引中包含了要返回的字段,此时就不会再回表,利用此特性可以提高查询速度。如:

select a,b,c from test where a = ? and b = ? and c = ?

此SQL语句使用了索引(a,b,c),因为索引中已包含要返回的字段a、b、c,所以可以直接在这棵索引树上获取结果,不用再回表。

索引的维护

随着数据的不断新增,MySQL需要维护索引的有序性,当新增的值要插到已满的数据页中,此时需要新增一个数据页,移动一部分原有的数据到该页中,此过程为页分裂,会导致数据页的利用率降低大约50%。相反,当相邻两个页由于数据的删除导致利用率很低时,会将这两个数据页合并,是页分裂的逆过程。
可以通过重建索引来使数据页有空洞的索引更加紧凑

相关文章

  • Mysql的索引实践

    上次聊到Mysql的索引,特别是InnoDB索引,InnoDB所以为聚簇索引,所谓聚簇索引是说数据是存在索引中的,...

  • MySQL索引及其优化

    MySQL中索引实现的底层数据结构 B+树索引 InnoDB可以使用这个也可以选择Hash InnoDB引擎中索引...

  • [数据库之十二] 数据库索引之覆盖索引

    1、MySQL 中的聚簇索引   对于 MySQL InnoDB 引擎来说,表必须要有聚簇索引(也叫聚集索引),设...

  • mysql 索引结构图解

    摘要: 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql...

  • Mysql的InnoDB索引深层次原理解析

    本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存...

  • Java架构—MySQL的InnoDB索引原理详解

    本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存...

  • Mysql 索引那些事

    Mysql 索引那些事 MySQL 常见几种索引类型 MyISAM 和 InnoDB 索引实现2.1. MyISA...

  • 索引类型

    一. MYSQL的索引mysql中,不同的存储引擎对索引的实现方式不同,大致说下MyISAM和InnoDB两种存储...

  • MySQL中的回表查询与索引覆盖

    了解一下MySQL中的回表查询与索引覆盖。 回表查询 要说回表查询,先要从InnoDB的索引实现说起。InnoDB...

  • Mysql InnoDB中的索引

    InnoDB索引 知识点 InnoDB中使用B+树和哈希实现索引,其中后者不受开发人员控制 B+树就是多叉树,叶子...

网友评论

      本文标题:MySQL中的InnoDB索引

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