mysql btree索引概述

  今天研究下,mysql中的b - tree索引,通过这篇文章你可以了解到,mysql中来的索引的原理,检索数据的过程,innodb和myisam引擎中btree索引的不同,以及btree索引的好处和限制。            ,,,,B - tree索引是MySQL数据库中使用最为频繁的索引类型,除了档案存储引擎之外的其他所有的存储引擎都支持B - tree索引。不仅仅在MySQL中是如此,实际上在其他的很多数据库管理系统中B - tree索引也同样是作为最主要的索引类型,这主要是因为B - tree索引的存储结构在数据库的数据检索中有非常优异的表现,值得注意的是MySQL中innodb和myisam引擎中的B - tree索引使用的是B +树(即每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历,并且除叶子节点外其他节点只存储键值和指针)。         ,,一般来说,MySQL中的B - tree索引的物理文件大多都是以B +树的结构来存储的,也就是所有实际需要的数据都存放于树的叶节点,而且到任何一个叶子节点的最短路径的长度都是完全相同的,可能各种数据库(或MySQL的各种存储引擎)在存放自己的B - tree索引的时候会对存储结构稍作改造。如Innodb存储引擎的B - tree索引实际使用的存储结构实际上是B +树,也就是在B -树数据结构的基础上做了很小的改造,在每一个叶子节点上面出了存放索引键值和主键的相关信息之外,B +树还存储了指向与该叶子节点相邻的后一个LeafNode的指针信息,这主要是为了加快检索多个相邻叶节点的效率考虑只         <强>一:下面重点讲解下在mysql中innodb和myisam的b - tree索引的不同实现原理,         <强> 1)MyISAM索引实现         MyISAM引擎使用B +树作为索引结构,叶节点的数据域仅仅存放的是指向数据记录的地址(也叫行指针),在MyISAM中,主索引和辅助索引(次级键)在结构上没有任何区别,只是主索引要求关键是唯一的,而辅助索引的关键可以重复。         <强> 2)InnoDB索引实现         虽然InnoDB也使用B +树作为索引结构,但具体实现方式却与MyISAM截然不同。         前面说过了,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据行记录的地址(行指针)。但是在innodb引擎中,btree索引分为两种,1,聚集索引(主键索引),2。二级索引,或者说叫辅助索引.InnoDB中的主键索引是聚集索引,表数据文件本身就是按B +树组织的一个索引结构,这棵树的叶节点数据域保存了完整的数据记录(整行数据)。这个索引的关键是数据表的主键,因此innodb表数据文件本身就是主键索引。但是innodb的二级索引,保存的是索引列值以及指向主键的指针,所以我们使用覆盖索引的做优化处理就是针对mysql的innodb的索引而言的。         <强>总结起来就是:         MyISAM引擎中叶子节点存储的内容:         主键索引:仅仅存储行指针;         二级索引:存储的也仅仅是行指针;         InnoDB引擎中叶子节点存储的内容         主键索引:聚集索引存储完整的数据(整行数据)         二级索引:存储索引列值+主键信息         下面这张图显示mysql中innodb和myisam引擎的索引实现的原理                  mysql btree索引概述