棣栧厛鎴戜滑浠嬬粛涓涓嬩竴棰?m 闃禕-tree鐨勭壒鎬э紝閭d箞榪欎釜 m 闃舵槸鎬庝箞瀹氫箟鐨勫憿錛熻繖閲屾垜浠互涓涓妭鐐硅兘鎷ユ湁鐨勬渶澶у瓙鑺傜偣鏁版潵琛ㄧず榪欓鏍戠殑闃舵暟銆備婦涓緥瀛愶紝濡傛灉涓涓妭鐐規渶澶氭湁 n 涓猭ey錛岄偅涔堣繖涓妭鐐規渶澶氬氨浼氭湁 n+1 涓瓙鑺傜偣錛岃繖媯墊爲灝卞彨鍋?n+1錛坢=n+1錛夐樁鏍戙備竴棰?m 闃禕-tree鍖呮嫭浠ヤ笅5鏉$壒鎬э細
榪欎簺鐗規у彲鑳界湅鐫涓嶅お濂界悊瑙o紝涓嬮潰鎴戜滑浼氫粙緇岯-tree鐨勬彃鍏ワ紝鍦ㄦ彃鍏ヨ妭鐐圭殑榪囩▼涓垜浠氨浼氭參鎱㈢悊瑙h繖浜涚壒鎬т簡銆侭-tree鐨勬彃鍏ユ瘮杈冪畝鍗曪紝灝辨槸涓涓妭鐐硅嚦涓嬭屼笂鐨勫垎瑁傝繃紼嬨備笅闈㈡垜浠叿浣撲互涓棰?闃舵爲鏉ュ睍紺築-tree鐨勬彃鍏ヨ繃紼嬨?/p>
棣栧厛鎴戜滑 鎻掑叆 200錛?00錛?00錛屾病鏈変粈涔堥棶棰橈紝鐩存帴鎻掑叆灝卞ソ銆?/p>
| 200 | 300 | 400 |
鐜板湪鎴戜滑鎺ョ潃鎻掑叆500錛岃繖涓椂鍊欐垜浠彂鐜版湁鐐歸棶棰橈紝鏍規嵁瀹氫箟鍙婄壒鎬?鎴戜滑鐭ラ亾涓棰?闃禕-tree鐨勬瘡涓妭鐐規渶澶氬彧鑳芥湁3涓猭ey錛屾彃鍏?00鍚庤繖涓妭鐐瑰氨鏈?涓猭ey浜嗐?/p>
| 200 | 300 | 400 | 500 |
榪欎釜鏃跺欐垜浠氨闇瑕佸垎瑁傦紝灝嗕腑闂寸殑key涓婄Щ鍒扮埗鑺傜偣錛屽乏杈圭殑浣滀負宸﹁妭鐐癸紝鍙寵竟鐨勪綔涓哄彸鑺傜偣錛屽涓嬪浘鎵紺猴細
閫氳繃鏁翠釜鐨勬彃鍏ヨ繃紼嬫垜浠篃浼氬彂鐜幫紝B-tree鍜屼簩鍙夋爲鐨勪竴涓樉钁楃殑鍖哄埆灝辨槸錛孊-tree鏄粠涓嬪線涓婄敓闀匡紝鑰屼簩鍙夋爲鏄粠涓婂線涓嬬敓闀跨殑銆傜幇鍦ㄦ垜浠兂鎯崇壒鎬?鍜岀壒鎬?鏄負浠涔堬紵棣栧厛鎴戜滑鐭ラ亾瀛愯妭鐐圭殑涓暟鏄瓑浜巏ey鐨勬暟鐩?1錛岀劧鍚庝竴涓妭鐐硅揪鍒癿涓猭ey鍚庡氨浼氬垎瑁傦紝鎵浠ュ垎瑁傚悗鐨勮妭鐐規渶灝戣兘寰楀埌 m/2 - 1涓猭ey 銆備負鍟ヨ繕瑕佸噺涓鍛紵鍥犱負榪樿鎷夸竴涓綔涓虹埗鑺傜偣銆傛墍浠ヨ繖涓妭鐐規渶灝戝洖鎷ユ湁 m/2 - 1 + 1 = m/2 涓瓙鑺傜偣銆傚悓鏍峰緱鍒扮壒鎬?錛屽洜涓烘渶灝戞湁m/2涓瓙鑺傜偣錛屾墍浠ユ渶灝戝氨鍚湁m/2-1涓猭ey錛宮 闃舵爲錛屾瘡涓妭鐐瑰瓨鍒頒簡m涓猭ey灝變細鍒嗚錛屾墍浠ユ渶澶氬氨鏈?m-1涓猭ey銆?/p>
鏍規嵁浠ヤ笂鐗規ф垜浠兘鎺ㄥ嚭涓媯靛惈鏈塏涓誨叧閿瓧鏁扮殑m闃剁殑B-tree鏍戠殑鏈澶ч珮搴鐨勫?
鏍戠殑楂樺害h: 1錛?2錛?3 錛?4 錛?......... 錛?h
鑺傜偣涓暟s: 1錛?2錛?2*(m/2)錛?2*(m/2)(m/2)錛?........ 錛?*(m/2)鐨刪-2嬈℃柟
s = 1 + 2(1 - )/(1- (m/2))
N = 1 + s * ((m/2) - 1) = 2 * ( ) - 1
h = log┌m/2┐((N+1)/2 )+1
2錛氫負浠涔坆tree/b+tree 涓哄父鐢ㄦ暟鎹簱绱㈠紩緇撴瀯錛?br />
涓婃枃璇磋繃錛岀孩榛戞爲絳夋暟鎹粨鏋勪篃鍙互鐢ㄦ潵瀹炵幇绱㈠紩錛屼絾鏄枃浠剁郴緇熷強鏁版嵁搴撶郴緇熸櫘閬嶉噰鐢˙-/+Tree浣滀負绱㈠紩緇撴瀯錛岃繖涓鑺傚皢緇撳悎璁$畻鏈虹粍鎴愬師鐞嗙浉鍏崇煡璇嗚璁築-/+Tree浣滀負绱㈠紩鐨勭悊璁哄熀紜銆?/p>
涓鑸潵璇達紝绱㈠紩鏈韓涔熷緢澶э紝涓嶅彲鑳藉叏閮ㄥ瓨鍌ㄥ湪鍐呭瓨涓紝鍥犳绱㈠紩寰寰浠ョ儲寮曟枃浠剁殑褰㈠紡瀛樺偍鐨勭鐩樹笂銆傝繖鏍風殑璇濓紝绱㈠紩鏌ユ壘榪囩▼涓氨瑕佷駭鐢熺鐩業/O娑堣楋紝鐩稿浜庡唴瀛樺瓨鍙栵紝I/O瀛樺彇鐨勬秷鑰楄楂樺嚑涓暟閲忕駭錛屾墍浠ヨ瘎浠蜂竴涓暟鎹粨鏋勪綔涓虹儲寮曠殑浼樺姡鏈閲嶈鐨勬寚鏍囧氨鏄湪鏌ユ壘榪囩▼涓鐩業/O鎿嶄綔嬈℃暟鐨勬笎榪涘鏉傚害銆傛崲鍙ヨ瘽璇達紝绱㈠紩鐨勭粨鏋勭粍緇囪灝介噺鍑忓皯鏌ユ壘榪囩▼涓鐩業/O鐨勫瓨鍙栨鏁般備笅闈㈠厛浠嬬粛鍐呭瓨鍜岀鐩樺瓨鍙栧師鐞嗭紝鐒跺悗鍐嶇粨鍚堣繖浜涘師鐞嗗垎鏋怋-/+Tree浣滀負绱㈠紩鐨勬晥鐜囥?/p>
鐩墠璁$畻鏈轟嬌鐢ㄧ殑涓誨瓨鍩烘湰閮芥槸闅忔満璇誨啓瀛樺偍鍣紙RAM錛夛紝鐜頒唬RAM鐨勭粨鏋勫拰瀛樺彇鍘熺悊姣旇緝澶嶆潅錛岃繖閲屾湰鏂囨姏鍗村叿浣撳樊鍒紝鎶借薄鍑轟竴涓崄鍒嗙畝鍗曠殑瀛樺彇妯″瀷鏉ヨ鏄嶳AM鐨勫伐浣滃師鐞嗐?/p>
鍥?
浠庢娊璞¤搴︾湅錛屼富瀛樻槸涓緋誨垪鐨勫瓨鍌ㄥ崟鍏冪粍鎴愮殑鐭╅樀錛屾瘡涓瓨鍌ㄥ崟鍏冨瓨鍌ㄥ浐瀹氬ぇ灝忕殑鏁版嵁銆傛瘡涓瓨鍌ㄥ崟鍏冩湁鍞竴鐨勫湴鍧錛岀幇浠d富瀛樼殑緙栧潃瑙勫垯姣旇緝澶嶆潅錛岃繖閲屽皢鍏剁畝鍖栨垚涓涓簩緇村湴鍧錛氶氳繃涓涓鍦板潃鍜屼竴涓垪鍦板潃鍙互鍞竴瀹氫綅鍒頒竴涓瓨鍌ㄥ崟鍏冦傚浘5灞曠ず浜嗕竴涓? x 4鐨勪富瀛樻ā鍨嬨?/p>
涓誨瓨鐨勫瓨鍙栬繃紼嬪涓嬶細
褰撶郴緇熼渶瑕佽鍙栦富瀛樻椂錛屽垯灝嗗湴鍧淇″彿鏀懼埌鍦板潃鎬葷嚎涓婁紶緇欎富瀛橈紝涓誨瓨璇誨埌鍦板潃淇″彿鍚庯紝瑙f瀽淇″彿騫跺畾浣嶅埌鎸囧畾瀛樺偍鍗曞厓錛岀劧鍚庡皢姝ゅ瓨鍌ㄥ崟鍏冩暟鎹斁鍒版暟鎹葷嚎涓婏紝渚涘叾瀹冮儴浠惰鍙栥?/p>
鍐欎富瀛樼殑榪囩▼綾諱技錛岀郴緇熷皢瑕佸啓鍏ュ崟鍏冨湴鍧鍜屾暟鎹垎鍒斁鍦ㄥ湴鍧鎬葷嚎鍜屾暟鎹葷嚎涓婏紝涓誨瓨璇誨彇涓や釜鎬葷嚎鐨勫唴瀹癸紝鍋氱浉搴旂殑鍐欐搷浣溿?/p>
榪欓噷鍙互鐪嬪嚭錛屼富瀛樺瓨鍙栫殑鏃墮棿浠呬笌瀛樺彇嬈℃暟鍛堢嚎鎬у叧緋伙紝鍥犱負涓嶅瓨鍦ㄦ満姊版搷浣滐紝涓ゆ瀛樺彇鐨勬暟鎹殑“璺濈”涓嶄細瀵規椂闂存湁浠諱綍褰卞搷錛屼緥濡傦紝鍏堝彇A0鍐嶅彇A1鍜屽厛鍙朅0鍐嶅彇D3鐨勬椂闂存秷鑰楁槸涓鏍風殑銆?/p>
涓婃枃璇磋繃錛岀儲寮曚竴鑸互鏂囦歡褰㈠紡瀛樺偍鍦ㄧ鐩樹笂錛岀儲寮曟绱㈤渶瑕佺鐩業/O鎿嶄綔銆備笌涓誨瓨涓嶅悓錛岀鐩業/O瀛樺湪鏈烘榪愬姩鑰楄垂錛屽洜姝ょ鐩業/O鐨勬椂闂存秷鑰楁槸宸ㄥぇ鐨勩?/p>
鍥?鏄鐩樼殑鏁翠綋緇撴瀯紺烘剰鍥俱?/p>
鍥?
涓涓鐩樼敱澶у皬鐩稿悓涓斿悓杞寸殑鍦嗗艦鐩樼墖緇勬垚錛岀鐩樺彲浠ヨ漿鍔紙鍚勪釜紓佺洏蹇呴』鍚屾杞姩錛夈傚湪紓佺洏鐨勪竴渚ф湁紓佸ご鏀灦錛岀澶存敮鏋跺浐瀹氫簡涓緇勭澶達紝姣忎釜紓佸ご璐熻矗瀛樺彇涓涓鐩樼殑鍐呭銆傜澶翠笉鑳借漿鍔紝浣嗘槸鍙互娌跨鐩樺崐寰勬柟鍚戣繍鍔紙瀹為檯鏄枩鍒囧悜榪愬姩錛夛紝姣忎釜紓佸ご鍚屼竴鏃跺埢涔熷繀欏繪槸鍚岃醬鐨勶紝鍗充粠姝d笂鏂瑰悜涓嬬湅錛屾墍鏈夌澶翠換浣曟椂鍊欓兘鏄噸鍙犵殑錛堜笉榪囩洰鍓嶅凡緇忔湁澶氱澶寸嫭绔嬫妧鏈紝鍙笉鍙楁闄愬埗錛夈?/p>
鍥?鏄鐩樼粨鏋勭殑紺烘剰鍥俱?/p>
鍥?
鐩樼墖琚垝鍒嗘垚涓緋誨垪鍚屽績鐜紝鍦嗗績鏄洏鐗囦腑蹇冿紝姣忎釜鍚屽績鐜彨鍋氫竴涓閬擄紝鎵鏈夊崐寰勭浉鍚岀殑紓侀亾緇勬垚涓涓煴闈€傜閬撹娌垮崐寰勭嚎鍒掑垎鎴愪竴涓釜灝忕殑孌碉紝姣忎釜孌靛彨鍋氫竴涓墖鍖猴紝姣忎釜鎵囧尯鏄鐩樼殑鏈灝忓瓨鍌ㄥ崟鍏冦備負浜嗙畝鍗曡搗瑙侊紝鎴戜滑涓嬮潰鍋囪紓佺洏鍙湁涓涓洏鐗囧拰涓涓澶淬?/p>
褰撻渶瑕佷粠紓佺洏璇誨彇鏁版嵁鏃訛紝緋葷粺浼氬皢鏁版嵁閫昏緫鍦板潃浼犵粰紓佺洏錛岀鐩樼殑鎺у埗鐢佃礬鎸夌収瀵誨潃閫昏緫灝嗛昏緫鍦板潃緲昏瘧鎴愮墿鐞嗗湴鍧錛屽嵆紜畾瑕佽鐨勬暟鎹湪鍝釜紓侀亾錛屽摢涓墖鍖恒備負浜嗚鍙栬繖涓墖鍖虹殑鏁版嵁錛岄渶瑕佸皢紓佸ご鏀懼埌榪欎釜鎵囧尯涓婃柟錛屼負浜嗗疄鐜拌繖涓鐐癸紝紓佸ご闇瑕佺Щ鍔ㄥ鍑嗙浉搴旂閬擄紝榪欎釜榪囩▼鍙仛瀵婚亾錛屾墍鑰楄垂鏃墮棿鍙仛瀵婚亾鏃墮棿錛岀劧鍚庣鐩樻棆杞皢鐩爣鎵囧尯鏃嬭漿鍒扮澶翠笅錛岃繖涓繃紼嬭楄垂鐨勬椂闂村彨鍋氭棆杞椂闂淬?/p>
鐢變簬瀛樺偍浠嬭川鐨勭壒鎬э紝紓佺洏鏈韓瀛樺彇灝辨瘮涓誨瓨鎱㈠緢澶氾紝鍐嶅姞涓婃満姊拌繍鍔ㄨ楄垂錛岀鐩樼殑瀛樺彇閫熷害寰寰鏄富瀛樼殑鍑犵櫨鍒嗗垎涔嬩竴錛屽洜姝や負浜嗘彁楂樻晥鐜囷紝瑕佸敖閲忓噺灝戠鐩業/O銆備負浜嗚揪鍒拌繖涓洰鐨勶紝紓佺洏寰寰涓嶆槸涓ユ牸鎸夐渶璇誨彇錛岃屾槸姣忔閮戒細棰勮錛屽嵆浣垮彧闇瑕佷竴涓瓧鑺傦紝紓佺洏涔熶細浠庤繖涓綅緗紑濮嬶紝欏哄簭鍚戝悗璇誨彇涓瀹氶暱搴︾殑鏁版嵁鏀懼叆鍐呭瓨銆傝繖鏍峰仛鐨勭悊璁轟緷鎹槸璁$畻鏈虹瀛︿腑钁楀悕鐨勫眬閮ㄦу師鐞嗭細
褰撲竴涓暟鎹鐢ㄥ埌鏃訛紝鍏墮檮榪戠殑鏁版嵁涔熼氬父浼氶┈涓婅浣跨敤銆?/p>
紼嬪簭榪愯鏈熼棿鎵闇瑕佺殑鏁版嵁閫氬父姣旇緝闆嗕腑銆?/p>
鐢變簬紓佺洏欏哄簭璇誨彇鐨勬晥鐜囧緢楂橈紙涓嶉渶瑕佸閬撴椂闂達紝鍙渶寰堝皯鐨勬棆杞椂闂達級錛屽洜姝ゅ浜庡叿鏈夊眬閮ㄦх殑紼嬪簭鏉ヨ錛岄璇誨彲浠ユ彁楂業/O鏁堢巼銆?/p>
棰勮鐨勯暱搴︿竴鑸負欏碉紙page錛夌殑鏁村嶆暟銆傞〉鏄綆楁満綆$悊瀛樺偍鍣ㄧ殑閫昏緫鍧楋紝紜歡鍙婃搷浣滅郴緇熷線寰灝嗕富瀛樺拰紓佺洏瀛樺偍鍖哄垎鍓蹭負榪炵畫鐨勫ぇ灝忕浉絳夌殑鍧楋紝姣忎釜瀛樺偍鍧楃О涓轟竴欏碉紙鍦ㄨ澶氭搷浣滅郴緇熶腑錛岄〉寰楀ぇ灝忛氬父涓?k錛夛紝涓誨瓨鍜岀鐩樹互欏典負鍗曚綅浜ゆ崲鏁版嵁銆傚綋紼嬪簭瑕佽鍙栫殑鏁版嵁涓嶅湪涓誨瓨涓椂錛屼細瑙﹀彂涓涓己欏靛紓甯革紝姝ゆ椂緋葷粺浼氬悜紓佺洏鍙戝嚭璇葷洏淇″彿錛岀鐩樹細鎵懼埌鏁版嵁鐨勮搗濮嬩綅緗茍鍚戝悗榪炵畫璇誨彇涓欏墊垨鍑犻〉杞藉叆鍐呭瓨涓紝鐒跺悗寮傚父榪斿洖錛岀▼搴忕戶緇繍琛屻?/p>
鍒拌繖閲岀粓浜庡彲浠ュ垎鏋怋-/+Tree绱㈠紩鐨勬ц兘浜嗐?/p>
涓婃枃璇磋繃涓鑸嬌鐢ㄧ鐩業/O嬈℃暟璇勪環绱㈠紩緇撴瀯鐨勪紭鍔c傚厛浠嶣-Tree鍒嗘瀽錛屾牴鎹瓸-Tree鐨勫畾涔夛紝鍙煡媯绱竴嬈℃渶澶氶渶瑕佽闂甴涓妭鐐廣傛暟鎹簱緋葷粺鐨勮璁¤呭閥濡欏埄鐢ㄤ簡紓佺洏棰勮鍘熺悊錛屽皢涓涓妭鐐圭殑澶у皬璁句負絳変簬涓涓〉錛岃繖鏍鋒瘡涓妭鐐瑰彧闇瑕佷竴嬈/O灝卞彲浠ュ畬鍏ㄨ澆鍏ャ備負浜嗚揪鍒拌繖涓洰鐨勶紝鍦ㄥ疄闄呭疄鐜癇- Tree榪橀渶瑕佷嬌鐢ㄥ涓嬫妧宸э細
姣忔鏂板緩鑺傜偣鏃訛紝鐩存帴鐢寵涓涓〉鐨勭┖闂達紝榪欐牱灝變繚璇佷竴涓妭鐐圭墿鐞嗕笂涔熷瓨鍌ㄥ湪涓涓〉閲岋紝鍔犱箣璁$畻鏈哄瓨鍌ㄥ垎閰嶉兘鏄寜欏靛榻愮殑錛屽氨瀹炵幇浜嗕竴涓猲ode鍙渶涓嬈/O銆?/p>
B-Tree涓竴嬈℃绱㈡渶澶氶渶瑕乭-1嬈/O錛堟牴鑺傜偣甯擱┗鍐呭瓨錛夛紝娓愯繘澶嶆潅搴︿負O(h)=O(logdN)銆?/strong>涓鑸疄闄呭簲鐢ㄤ腑錛屽嚭搴鏄潪甯稿ぇ鐨勬暟瀛楋紝閫氬父瓚呰繃100錛屽洜姝闈炲父灝忥紙閫氬父涓嶈秴榪?錛夈?/p> 緇間笂鎵榪幫紝鐢˙-Tree浣滀負绱㈠紩緇撴瀯鏁堢巼鏄潪甯擱珮鐨勩?/p> 鑰岀孩榛戞爲榪欑緇撴瀯錛宧鏄庢樉瑕佹繁鐨勫銆傜敱浜庨昏緫涓婂緢榪戠殑鑺傜偣錛堢埗瀛愶級鐗╃悊涓婂彲鑳藉緢榪滐紝鏃犳硶鍒╃敤灞閮ㄦэ紝鎵浠ョ孩榛戞爲鐨処/O娓愯繘澶嶆潅搴︿篃涓篛(h)錛屾晥鐜囨槑鏄炬瘮B-Tree宸緢澶氥?/p> 涓婃枃榪樿榪囷紝B+Tree鏇撮傚悎澶栧瓨绱㈠紩錛屽師鍥犲拰鍐呰妭鐐瑰嚭搴鏈夊叧銆備粠涓婇潰鍒嗘瀽鍙互鐪嬪埌錛宒瓚婂ぇ绱㈠紩鐨勬ц兘瓚婂ソ錛岃屽嚭搴︾殑涓婇檺鍙栧喅浜庤妭鐐瑰唴key鍜宒ata鐨勫ぇ灝忥細 dmax = floor(pagesize / (keysize + datasize + pointsize)) (pagesize – dmax >= pointsize) 鎴?/p> dmax = floor(pagesize / (keysize + datasize + pointsize)) - 1 (pagesize – dmax < pointsize) floor琛ㄧず鍚戜笅鍙栨暣銆傜敱浜嶣+Tree鍐呰妭鐐瑰幓鎺変簡data鍩燂紝鍥犳鍙互鎷ユ湁鏇村ぇ鐨勫嚭搴︼紝鎷ユ湁鏇村ソ鐨勬ц兘銆?/p> 榪欎竴绔犱粠鐞嗚瑙掑害璁ㄨ浜嗕笌绱㈠紩鐩稿叧鐨勬暟鎹粨鏋勪笌綆楁硶闂錛屼笅涓绔犲皢璁ㄨB+Tree鏄浣曞叿浣撳疄鐜頒負MySQL涓儲寮曪紝鍚屾椂灝嗙粨鍚圡yISAM鍜孖nnDB瀛樺偍寮曟搸浠嬬粛闈炶仛闆嗙儲寮曞拰鑱氶泦绱㈠紩涓ょ涓嶅悓鐨勭儲寮曞疄鐜板艦寮忋?/p>
]]>