mysql 使用B+Tree做为索引实现,并在叶子结点增长了顺序访问指针。html
红黑树等数据结构也能够用来实现索引,可是文件系统及数据库系统广泛采用B-/+Tree做为索引结构mysql
目前大部分数据库系统及文件系统都采用B-Tree或其变种B+Tree做为索引结构。跟磁盘IO读写有关。sql
MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。数据库
MyISAM引擎使用B+Tree做为索引结构,叶节点的data域存放的是数据记录的地址。数据结构
MyISAM的索引方式也叫作“非汇集”的,之因此这么称呼是为了与InnoDB的汇集索引区分。性能
InnoDB的数据文件自己就是主键的索引文件,叶子结点保存的是数据。因此InnoDB必须有pk,MyISAM能够没有pk。.net
辅助索引叶子结点存储相应记录的主键,因此主键查询最快,非主键索引查出来的数据是主键,再用主键查找最终数据。debug
http://blog.csdn.net/debug_zhang/article/details/52168552指针
https://www.cnblogs.com/luyucheng/p/6289714.htmlhtm
Hash 索引结构的特殊性,其检索效率很是高,索引的检索能够一次定位,不像B-Tree 索引须要从根节点到枝节点,最后才能访问到页节点这样屡次的IO访问,因此 Hash 索引的查询效率要远高于 B-Tree 索引。
缺点:(1)Hash 索引仅仅能知足"=","IN"。因为 Hash 索引比较的是进行 Hash 运算以后的 Hash 值,因此它只能用于等值的过滤
(2)Hash 索引没法被用来避免数据的排序操做。
(3)Hash 索引不能利用部分索引键查询。
对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一块儿计算 Hash 值,而不是单独计算 Hash 值,因此经过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也没法被利用。
(4)Hash 索引在任什么时候候都不能避免表扫描。
(5)Hash 索引遇到大量Hash值相等的状况后性能并不必定就会比B-Tree索引高。
https://www.cnblogs.com/vijayfly/p/6485442.html