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

 

聚集索引:(InnoDB主键)

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

 

        

 

非聚集索引:(InnoDB非主键)

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

 

 

 

②MyISAM

只有非聚集索引。

 

 

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

猜你喜欢

转载自mdxdjh2.iteye.com/blog/2202881