1. 程式人生 > >B-tree演算法查詢效率分析

B-tree演算法查詢效率分析

    最小度數為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索引低。