MyISAM与InnoDB的索引结构

MyISAM与InnoDB的索引结构

现在我们硬盘上的数据,基本上都是使用B+Tree数据结构来进行存储数据的。

1、非聚簇(集)结构

MyISAM主键索引有二个文件,有一个是索引文件(以 .MYI 结尾),一个是数据文件(以 .MYD 结尾)。
通过索引查找数据的时候,是通过找到索引下面挂载的数据编号,通过这个编号找到我们的数据区,取出数据。如下图所示:
MyISAM与InnoDB的索引结构_第1张图片
MyISAM普通索引与主键索引在硬盘上面的存储方式,都是一样的。Mysql服务器实现的不同点是主键索引是唯一不能重复的,普通索引是可以重复的。如下图所示:
MyISAM与InnoDB的索引结构_第2张图片

2、聚簇(集)结构

innodb主键与数据是在一起的,所以Innodb引擎,表数据与表索引在一起,只有一个文件。如下图所示:
MyISAM与InnoDB的索引结构_第3张图片
innodb普通索引,如下图所示:
MyISAM与InnoDB的索引结构_第4张图片
索引的作用:
索引是排过序数据,索引会让我们在遍历的时候,少遍历很多数据,所以会加速我们的查询。
innodb如果使用非主键进行查询的时候,会出现二次遍历:
第一次:遍历普通索引,找到普通索引上面的主键编号;
第二次:遍历主键索引,找到想要的数据,返回查询结果。
在创建innodb引擎表的时候,必需给innodb创建主键,且为整型,并且是自增长的,原因有三:一,不创建主键索引时,MySql服务器就会找这个表里面某个字段来当做主键索引创建,找不到合适的字段,innodb会自动创建一个主键索引;二,innodb引擎的表,插入操作的时候,一定要让主键字段是顺序插入的;如果非顺序插入,每次插入的时候,都会进行排序,数据就会整体移动,移动过程要消耗IO,数据量特别大时,占用的时间会特别的长。三,整型会查询较快。

你可能感兴趣的:(MyISAM与InnoDB的索引结构)