B樹(shù)索引和Hash索引的應(yīng)用場(chǎng)景和區(qū)別(轉(zhuǎn)載)

轉(zhuǎn)自:https://blog.csdn.net/chuangsun/article/details/78013537

關(guān)系型數(shù)據(jù)庫(kù)中挤渔,索引大多采用B/B+樹(shù)來(lái)作為存儲(chǔ)結(jié)構(gòu),而全文搜索引擎的索引則主要采用hash的存儲(chǔ)結(jié)構(gòu)风题,這兩種數(shù)據(jù)結(jié)構(gòu)有什么區(qū)別判导?

如果是等值查詢(xún),那么哈希索引明顯有絕對(duì)優(yōu)勢(shì)沛硅,因?yàn)橹恍枰?jīng)過(guò)一次算法即可找到相應(yīng)的鍵值眼刃;當(dāng)然了,這個(gè)前提是稽鞭,鍵值都是唯一的鸟整。如果鍵值不是唯一的,就需要先找到該鍵所在位置朦蕴,然后再根據(jù)鏈表往后掃描篮条,直到找到相應(yīng)的數(shù)據(jù);

從示意圖中也能看到吩抓,如果是范圍查詢(xún)檢索涉茧,這時(shí)候哈希索引就毫無(wú)用武之地了,因?yàn)樵仁怯行虻逆I值疹娶,經(jīng)過(guò)哈希算法后伴栓,有可能變成不連續(xù)的了,就沒(méi)辦法再利用索引完成范圍查詢(xún)檢索雨饺;

同理钳垮,哈希索引也沒(méi)辦法利用索引完成排序,以及l(fā)ike ‘xxx%’ 這樣的部分模糊查詢(xún)(這種部分模糊查詢(xún)额港,其實(shí)本質(zhì)上也是范圍查詢(xún))饺窿;

哈希索引也不支持多列聯(lián)合索引的最左匹配規(guī)則;

B+樹(shù)索引的關(guān)鍵字檢索效率比較平均移斩,不像B樹(shù)那樣波動(dòng)幅度大肚医,在有大量重復(fù)鍵值情況下绢馍,哈希索引的效率也是極低的,因?yàn)榇嬖谒^的哈希碰撞問(wèn)題

hash結(jié)構(gòu)的特點(diǎn):檢索效率非常高肠套,索引的檢索可以一次到位舰涌,O(1)。B樹(shù)需要從根節(jié)點(diǎn)到枝節(jié)點(diǎn)你稚,最后才能到葉節(jié)點(diǎn)進(jìn)行多次I/O操作瓷耙,所以hash的效率遠(yuǎn)遠(yuǎn)高于B樹(shù)的效率。

那么為什么數(shù)據(jù)庫(kù)索引還是用B樹(shù)結(jié)構(gòu)呢入宦?

1哺徊、hash索引僅滿(mǎn)足“=”室琢、“IN”和“<=>”查詢(xún)乾闰,不能使用范圍查詢(xún)

因?yàn)閔ash索引比較的是經(jīng)常hash運(yùn)算之后的hash值,因此只能進(jìn)行等值的過(guò)濾盈滴,不能基于范圍的查找涯肩,因?yàn)榻?jīng)過(guò)hash算法處理后的hash值的大小關(guān)系,并不能保證與處理前的hash大小關(guān)系對(duì)應(yīng)巢钓。

2病苗、hash索引無(wú)法被用來(lái)進(jìn)行數(shù)據(jù)的排序操作

由于hash索引中存放的都是經(jīng)過(guò)hash計(jì)算之后的值,而hash值的大小關(guān)系不一定與hash計(jì)算之前的值一樣症汹,所以數(shù)據(jù)庫(kù)無(wú)法利用hash索引中的值進(jìn)行排序操作硫朦。

3、對(duì)于組合索引背镇,Hash 索引在計(jì)算 Hash 值的時(shí)候是組合索引鍵合并后再一起計(jì)算 Hash 值咬展,而不是單獨(dú)計(jì)算 Hash 值,所以通過(guò)組合索引的前面一個(gè)或幾個(gè)索引鍵進(jìn)行查詢(xún)的時(shí)候瞒斩,Hash 索引也無(wú)法被利用破婆。

4、Hash 索引遇到大量Hash值相等的情況后性能并不一定就會(huì)比B-Tree索引高胸囱。

對(duì)于選擇性比較低的索引鍵祷舀,如果創(chuàng)建 Hash 索引,那么將會(huì)存在大量記錄指針信息存于同一個(gè) Hash 值相關(guān)聯(lián)烹笔。這樣要定位某一條記錄時(shí)就會(huì)非常麻煩裳扯,會(huì)浪費(fèi)多次表數(shù)據(jù)的訪問(wèn),而造成整體性能低下谤职。

(因此:鍵值重復(fù)率低的適合用B樹(shù)索引)

b-tree完全基于key的比較饰豺,和二叉樹(shù)相同的道理,相當(dāng)于建個(gè)排序后的數(shù)據(jù)集柬帕,使用二分法查找算法哟忍,實(shí)際上也非辰泼牛快,而且受數(shù)據(jù)量增長(zhǎng)影響非常小锅很。



B+樹(shù)索引和哈希索引的區(qū)別

轉(zhuǎn)自:https://www.cnblogs.com/bonelee/p/6224698.html

哈希文件也稱(chēng)為散列文件其馏,是利用哈希存儲(chǔ)方式組織的文件,亦稱(chēng)為直接存取文件爆安。它類(lèi)似于哈希表叛复,即根據(jù)文件中關(guān)鍵字的特點(diǎn),設(shè)計(jì)一個(gè)哈希函數(shù)和處理沖突的方法扔仓,將記錄哈希到存儲(chǔ)設(shè)備上褐奥。

在哈希文件中,是使用一個(gè)函數(shù)(算法)來(lái)完成一種將關(guān)鍵字映射到存儲(chǔ)器地址的映射翘簇,根據(jù)用戶(hù)給出的關(guān)鍵字撬码,經(jīng)函數(shù)計(jì)算得到目標(biāo)地址,再進(jìn)行目標(biāo)的檢索版保。

轉(zhuǎn)自:http://imysql.com/2016/01/06/mysql-faq-different-between-btree-and-hash-index.shtml

B+樹(shù)索引和哈希索引的區(qū)別

一個(gè)經(jīng)典的B+樹(shù)索引數(shù)據(jù)結(jié)構(gòu)見(jiàn)下圖:

(圖片源自網(wǎng)絡(luò))

B+樹(shù)是一個(gè)平衡的多叉樹(shù)呜笑,從根節(jié)點(diǎn)到每個(gè)葉子節(jié)點(diǎn)的高度差值不超過(guò)1,而且同層級(jí)的節(jié)點(diǎn)間有指針相互鏈接彻犁。

在B+樹(shù)上的常規(guī)檢索叫胁,從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的搜索效率基本相當(dāng),不會(huì)出現(xiàn)大幅波動(dòng)汞幢,而且基于索引的順序掃描時(shí)驼鹅,也可以利用雙向指針快速左右移動(dòng),效率非常高森篷。因此输钩,B+樹(shù)索引被廣泛應(yīng)用于數(shù)據(jù)庫(kù)、文件系統(tǒng)等場(chǎng)景疾宏。

哈希索引的示意圖則是這樣的:

(圖片源自網(wǎng)絡(luò))

簡(jiǎn)單地說(shuō)张足,哈希索引就是采用一定的哈希算法,把鍵值換算成新的哈希值坎藐,檢索時(shí)不需要類(lèi)似B+樹(shù)那樣從根節(jié)點(diǎn)到葉子節(jié)點(diǎn)逐級(jí)查找为牍,只需一次哈希算法即可立刻定位到相應(yīng)的位置,速度非逞意桑快碉咆。

從上面的圖來(lái)看,B+樹(shù)索引和哈希索引的明顯區(qū)別是:

如果是等值查詢(xún)蛀恩,那么哈希索引明顯有絕對(duì)優(yōu)勢(shì)疫铜,因?yàn)橹恍枰?jīng)過(guò)一次算法即可找到相應(yīng)的鍵值;當(dāng)然了双谆,這個(gè)前提是壳咕,鍵值都是唯一的席揽。如果鍵值不是唯一的,就需要先找到該鍵所在位置谓厘,然后再根據(jù)鏈表往后掃描幌羞,直到找到相應(yīng)的數(shù)據(jù);

從示意圖中也能看到竟稳,如果是范圍查詢(xún)檢索属桦,這時(shí)候哈希索引就毫無(wú)用武之地了,因?yàn)樵仁怯行虻逆I值他爸,經(jīng)過(guò)哈希算法后聂宾,有可能變成不連續(xù)的了,就沒(méi)辦法再利用索引完成范圍查詢(xún)檢索诊笤;

同理系谐,哈希索引也沒(méi)辦法利用索引完成排序,以及l(fā)ike ‘xxx%’ 這樣的部分模糊查詢(xún)(這種部分模糊查詢(xún)盏混,其實(shí)本質(zhì)上也是范圍查詢(xún))蔚鸥;

哈希索引也不支持多列聯(lián)合索引的最左匹配規(guī)則

B+樹(shù)索引的關(guān)鍵字檢索效率比較平均许赃,不像B樹(shù)那樣波動(dòng)幅度大,在有大量重復(fù)鍵值情況下馆类,哈希索引的效率也是極低的混聊,因?yàn)榇嬖谒^的哈希碰撞問(wèn)題

后記

通常乾巧,B+樹(shù)索引結(jié)構(gòu)適用于絕大多數(shù)場(chǎng)景句喜,像下面這種場(chǎng)景用哈希索引才更有優(yōu)勢(shì):

在HEAP表中,如果存儲(chǔ)的數(shù)據(jù)重復(fù)度很低(也就是說(shuō)基數(shù)很大)沟于,對(duì)該列數(shù)據(jù)以等值查詢(xún)?yōu)橹骺任福瑳](méi)有范圍查詢(xún)、沒(méi)有排序的時(shí)候旷太,特別適合采用哈希索引

例如這種SQL:

SELECT … FROM t WHERE C1 = ?; — 僅等值查詢(xún)

在大多數(shù)場(chǎng)景下展懈,都會(huì)有范圍查詢(xún)、排序供璧、分組等查詢(xún)特征存崖,所以數(shù)據(jù)庫(kù)使用B+樹(shù)索引。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末睡毒,一起剝皮案震驚了整個(gè)濱河市来惧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌演顾,老刑警劉巖供搀,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隅居,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡葛虐,警方通過(guò)查閱死者的電腦和手機(jī)军浆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挡闰,“玉大人乒融,你說(shuō)我怎么就攤上這事∩忝酰” “怎么了赞季?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)奢驯。 經(jīng)常有香客問(wèn)我申钩,道長(zhǎng),這世上最難降的妖魔是什么瘪阁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任撒遣,我火速辦了婚禮,結(jié)果婚禮上管跺,老公的妹妹穿的比我還像新娘义黎。我一直安慰自己,他們只是感情好豁跑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布廉涕。 她就那樣靜靜地躺著,像睡著了一般艇拍。 火紅的嫁衣襯著肌膚如雪狐蜕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天卸夕,我揣著相機(jī)與錄音层释,去河邊找鬼。 笑死快集,一個(gè)胖子當(dāng)著我的面吹牛贡羔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碍讨,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼治力,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了勃黍?” 一聲冷哼從身側(cè)響起宵统,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后马澈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體瓢省,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年痊班,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勤婚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涤伐,死狀恐怖馒胆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情凝果,我是刑警寧澤祝迂,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站器净,受9級(jí)特大地震影響型雳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜山害,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一纠俭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浪慌,春花似錦冤荆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至妖碉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芥被,已是汗流浹背欧宜。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拴魄,地道東北人冗茸。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像匹中,于是被迫代替她去往敵國(guó)和親夏漱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容