导读
二者区别备注:先说下,在MySQL文档里,实际上是把B 树索引写成了BTREE,例如像下面这样的写法:
一个经典的B 树索引数据结构见下图: B 树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接。 在B 树上的常规检索,从根节点到叶子节点的搜索效率基本相当,不会出现大幅波动,而且基于索引的顺序扫描时,也可以利用双向指针快速左右移动,效率非常高。 因此,B 树索引被广泛应用于数据库、文件系统等场景。顺便说一下,xfs文件系统比ext3/ext4效率高很多的原因之一就是,它的文件及目录索引结构全部采用B 树索引,而ext3/ext4的文件目录结构则采用Linked list, hashed B-tree、Extents/Bitmap等索引数据结构,因此在高I/O压力下,其IOPS能力不如xfs。 详细可参见: https://en.wikipedia.org/wiki/Ext4 而哈希索引的示意图则是这样的: 简单地说,哈希索引就是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B 树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可立刻定位到相应的位置,速度非常快。 从上面的图来看,B 树索引和哈希索引的明显区别是:
后记在MySQL中,只有HEAP/MEMORY引擎表才能显式支持哈希索引(NDB也支持,但这个不常用),InnoDB引擎的自适应哈希索引(adaptive hash index)不在此列,因为这不是创建索引时可指定的。 还需要注意到:HEAP/MEMORY引擎表在mysql实例重启后,数据会丢失。 通常,B 树索引结构适用于绝大多数场景,像下面这种场景用哈希索引才更有优势:
在大多数场景下,都会有范围查询、排序、分组等查询特征,用B 树索引就可以了。 本文转载自:微信公众账号 - MySQL中文网,版权归原作者所有! |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|