索引是帮助数据库高效获取数据的一种数据结构,经过提取句子主干,就能够获得索引的本质。html
若是想了解Btree
,须要首先了解m-way
数据结构。node
m-way
查找树是是一种树形的存储结构,主要特色以下,数据库
例如,
3-way如图,m为3,那么每一个节点最多拥有为2个(m-1),数据结构
待索引元素列表为: [5, 7, 12, 6, 8, 3, 4]
Btree
是一种平衡的m-way
查找树,它能够利用多个分支节点(子树节点)来减小查询数据时所经历的节点数,从而达到节省存取时间的目的。指针
主要特色以下,code
m/2
必须从根节点开始采用二分法查找,因此时间复杂度为O(logn)
。htm
为了保证树的平衡,若是带插入节点的key数量小于m-1个,则直接插入(不会违反第一条特性),不然,须要将该节点分为两部分,再执行该操做。blog
详细插入操做可参考:http://www.cnblogs.com/yangecnu/p/introduce-b-tree-and-b-plus-tree.html排序
B+tree
是基于Btree
的变体,与Btree
不一样之处在于,索引
索引自己也很大,不可能所有存储在内存中,所以索引每每以索引文件的形式存储的磁盘上。
索引查找过程当中就要产生磁盘I/O消耗,相对于内存存取,I/O存取的消耗要高几个数量级,因此评价一个数据结构做为索引的优劣最重要的指标就是在查找过程当中磁盘I/O操做次数的渐进复杂度。(换句话说,索引的结构组织要尽可能减小查找过程当中磁盘I/O的存取次数。)
为了达到下降磁盘I/O的目的
红黑树
红黑树BST
的时间复杂度是依赖于树的高度,可是,红黑树的高度与Btree相比,高度更大。