Innodb 索引结构了解

[复制链接]
查看11 | 回复5 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
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 索引结构了解 - Innodb Index Structure
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
不错。
期待续集。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
从文字描述上看Clustered Primary Key结构类似sql server的聚簇索引,但是sql server的聚簇索引不一定要pk ,Secondary Index类似sql server的非聚簇索引
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
呵呵,其实Oracle的Cluster Index也差不多
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
和oracle的iot类似
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
整体来说确实和oracle 的 iot 差不多,这种结构如果对索引的更新比较频繁的话会有较大麻烦,如果对主键更新较多就更麻烦了,当然,出现对主键频繁更新的时候,那肯定设计上就存在一定的问题了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行