2008年11月18日星期二

[转]Innodb 索引结构了解 - Innodb Index Structure

 虽然不是每个人都是DBA,但是了解一下数据库具体的实现方式,对于大家数据库编程,设计数据库等等都是很有好处的.
Innodb 里面,primary key是非常重要的,其他index是依赖primary key实现的.即使建表的时候没有定义primary key,mysql也会自己建立/维护一个隐藏的primary key.



Innodb 索引结构了解 - Innodb Index Structure








Innodb 作为 MySQL 中使用最为广泛的 事务型存储引擎,不仅在事务实现数据版本控制方面和其他存储引擎有一定的区别,其数据结构也是以非常有特点的方式存储的。

每个Innodb表的数据其实可以说就是以一个树型(B-Tree)结构存储的,表的数据和主键(Primary Key)共同组成了一个索引结构,也就是我们常说的Innodb的Clustered Primary Key。在这个Clustered Primary Key中,Leaf Nodes其实就是实际的表记录,我们常规理解上的索引信息全部在Branch Nodes上面。

除了Clustered Primary Key之外的其他所有索引在Innodb中被称为Secondary Index。Secondary Index就和普通的B-Tree索引差不多了,只不过在Secondary Index的所有Leaf Nodes上面同时包含了所指向数据记录的主键信息,而不是直接指向数据记录的位置信息。

所以,在 Innodb 中,如果主键值占用存储空间较大的话,会直接影响整个存储 Innodb 表所需要的物理空间,同时也会直接影响到 Innodb 的查询性能。

下面是画的一张 Innodb 索引基本结构图,包括 Primary Key 和 Secondary Index 两种索引的比较。

innodb_index_structure

原文出自: Innodb 索引结构了解 - Innodb Index Structure


 

 


没有评论: