当前位置: 代码迷 >> MySQL >> MySQl 目录分析
  详细解决方案

MySQl 目录分析

热度:886   发布时间:2016-05-05 17:13:57.0
MySQl 索引分析

前序:?

索引有多种类型,其中包括主键索引、唯一索引、B+Tree索引(聚集索引和非聚集索引)、哈希索引等等,下面主要深入了解一下B+Tree索引和聚集索引。

?

B+Tree介绍

MySQL是由B+Tree构成的,下面先来介绍一下什么是B+Tree。

?

①B+Tree是为磁盘或者其他直接存取辅助设备而设计的一种平衡二叉树。(这句话怎么理解?)

答:数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B+Tree还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

?

②B+Tree的节点都是按照键值的大小顺序存放的,叶节点之间也通过指针连接起来,为了提高取数据时的效率。

?

具体结构如下图:



?

?

B+Tree索引

B+Tree索引包含了聚集索引和非聚集索引。

?

①InnoDB

?

聚集索引:

聚集索引就是按照每张表的主键构造一颗B+Tree,并且叶子节点就是存放的是整张表的行记录数据的数据页,每个数据页之间也通过双向链表进行连接。

?

? ? ? ??

?

非聚集索引:

非聚集索引与聚集索引唯一的不同就是非聚集索引叶子节点存放的data是对应的数据聚集索引的key,所以每当访问非聚集索引的数据,其实是走了两个步骤,首先找到聚集索引的key,再通过聚集索引的key找到对应的数据信息。

?

?

?

②MyISAM

聚集索引和非聚集索引的数据表结构差别不大。叶子节点都存放的是指向数据行信息的指针数据。

?

?

参考文献:《MySQL技术内幕InnoDB存储引擎》

  相关解决方案