1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

InnoDB存储引擎表的数据结构

底层存储的数据模型——B+树

InnoDB存储引擎表的数据都是存储在B+树中的。B+树是由B树演化而来,对于磁盘中存储与读取十分适合,具有高扇出性和范围查询的高效率,从严格意义上讲,B+树已不满足“树”的定义,但其重要特点有:每个结点可以存储多个关键字,所有叶子结点都位于同一层次,叶子结点之间通过双向链表链接,依关键字的大小自小而大链接。

InnoDB存储引擎表的数据结构

聚集索引与二级索引

InnoDB表的底层存储是一棵棵的B+树,每张表可能对应多棵B+树。表中的数据会按照主键的顺序构造一棵B+树,即聚集索引。除此之外,表中还有二级索引,其在底层存储上也是一棵B+树。聚集索引中每行数据都存储在叶子结点中,叶子结点对应着数据库概念中的数据页,在InnoDB存储引擎中,每个数据页大小默认为16KB。二级索引在非叶子结点中仅包含二级索引所在字段的值和指向叶子结点的指针,而叶子结点中包含二级索引值、主键值以及指向上一个叶子结点和下一个叶子结点的指针。当需要通过二级索引查询整行数据时,需要通过在二级索引中查询到的主键值,回到聚集索引中再查询一次,这个过程就被称为“回表”。

延伸

为什么必须设置主键?为什么创建索引会耗时较久?为什么单张表上索引特别多时Insert语句会执行比较慢?为什么覆盖索引效率会比较高?本篇文章讲解了这些问题的原因。建表时定义主键,InnoDB引擎会选择主键作为聚集索引,而非空唯一索引作为二级索引。当表中索引特别多时,Insert语句需要在聚集索引和所有二级索引的B+树上插入数据,因此执行速度较慢。覆盖索引效率高就体现在其避免了“回表”的操作。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/6069.html