B-tree算法查询效率分析

来源:互联网 发布:mac隐藏相册 编辑:程序博客网 时间:2024/04/29 15:07

    B-tree的介绍请看这里:http://blog.csdn.net/flq_chank/article/details/41928291

    最小度数为d,最大度数为2d-1,高度为h(h=1,2,…)的B-tree,在最坏情况下,其第一层有1个结点,第二层有2个结点,第三层有2d个结点,第四层有2d2个结点……,第h层有2dh-2个结点,如图所示:


                                       


    此时B-tree结点内数据实体的总数为(h≥2):

Nmin=1+(2+2d+2d2+…+2dh-2)×(d-1)  = 2dh-2-1

    因此,在最坏情况下,h=㏒d((Nmin+1)/2)+2。

    在最好的情况下,其第一层有1个结点,第二层有2d-1个结点,第三层有(2d-1)2个结点……,第h层有(2d-1)h-1个结点,如图所示:



    此时B-tree结点内数据实体的总数为(h≥1):

Nmax=(1+(2d-1)1+(2d-1)2+…++(2d-1)h-1) ×(2d-2)=(2d-1)h-1

    因此,在最好情况下,h=㏒2d-1(Nmax+1)。

    即树的高度h有:㏒2d-1(N+1) ≤ h ≤ ㏒d((N+1)/2)+2。可以看出,在最好和最坏情况下,树的高度都是以O(h)=O(㏒dN)来增长的。使用B-tree进行查询的时间复杂度是O(㏒dN),在数据量很大时,可以将d的值设大一点,这样树的高度就会很小,大大减少了I/O操作,提高了查询速度。

    单论单个数据实体的查询效率来说,Hash索引的查询效率远比B-tree索引高。因为Hash索引大部分情况下只要一次I/O就行了,而B-tree索引需要O(h)次I/O。但任何事物都是有两面性的,由于Hash索引结构的特殊性,其存在着很多限制和弊端。主要表现在:(1)Hash索引不能进行范围查询,只能满足“=”、“IN”和“!=”等查询(2)Hash索引不能用来简化排序操作(3)当Hash索引遇到大量Hash值相等的情况下效率可能会比B-tree索引低。



0 0
原创粉丝点击