MySQL的存储引擎InnoDB选择了B+ 树
我们知道数据的存储和检索是两个很重要的功能,当我们的数据量大了,怎么能快速的检索数据呢,答案是使用索引,可索引具体的技术实现有很多,选择哪一种呢,我就以mysql为例记录下它为什么选择了B+树作为索引的实现方式。 1. 索引简介 索引是一种用于快速查询行的数据结构 ,就像一本书的目录就是一个索引,如果想在一本书中找到某个主题,一般会先找到对应页码。MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质: 索引是数据结构 。 2. 索引的几种数据结构类型 2.1 哈希索引(hash index) 哈希索引(hash index)基于哈希表(也可以叫散列表)实现 ,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。 下面举个小例子 它能快速的检索数据,不过在mysql数据库却有局限: a): 哈希索引数据并不是按照索引值顺序存储的,所以无法用来进行排序; b): 不能进行多列字段查询数据; c): 更不支持范围查询,比如查询年龄大于30,。 d): 有大量重复键值的情况下,哈希索引的效率也是极低的