常用的數(shù)據(jù)索引數(shù)據(jù)結構

在創(chuàng)建索引時厚骗,通常采用的數(shù)據(jù)結構有:Hash示启、二叉搜索樹、紅黑樹领舰、B樹以及B+樹夫嗓。這里主要介紹這些數(shù)據(jù)結構的設計思想,不做底層實現(xiàn)研究冲秽。

  1. Hash結構:通過一定的算法計算數(shù)據(jù)的Hash值舍咖,然后得到數(shù)據(jù)的存放位置,例如JAVA中的HashMap采用就是這種數(shù)據(jù)索引結構锉桑。

    • 優(yōu)點:檢索時間快排霉,平均檢索時間為O(1)。
    • 缺點:
      • 因為Hash值是通過算法計算出來的民轴,存在Hash碰撞的幾率攻柠,比如HashMap對于Hash值相同的數(shù)據(jù),會在Hash值所在桶創(chuàng)建一個鏈表后裸,用于存放相同Hash值的數(shù)據(jù)辙诞。
      • 在數(shù)據(jù)量很大的情況下,內(nèi)存無法加載全部的數(shù)據(jù)索引轻抱。
  2. 二叉搜索樹:定義規(guī)則為“左邊節(jié)點值比根節(jié)點小,右邊節(jié)點值比根節(jié)點大旦部,并且左右子節(jié)點都是排序樹”祈搜。

    • 優(yōu)點:可以解決大量數(shù)據(jù)索引無法一次加載進內(nèi)存中的問題,二叉搜索樹可以批量加載數(shù)據(jù)進內(nèi)存士八。
    • 缺點:
      • 檢索時間與樹的高度有關容燕,樹的高度越高,檢索次數(shù)及時間相對就會越久婚度。
      • 極端情況下蘸秘,如果數(shù)據(jù)本身就是有序的,二叉搜索樹會退化成鏈表蝗茁,性能會急劇降低醋虏。
  3. 紅黑樹:紅黑樹是一種自平衡二叉樹,主要解決二叉搜索樹在極端情況下退化成鏈表的情況哮翘,在數(shù)據(jù)插入的時候同時調(diào)整整個樹颈嚼,使其節(jié)點盡量均勻分布,保證平衡性饭寺,目的在于降低樹的高度阻课,提高查詢效率叫挟。

    • 優(yōu)點:解決二叉搜索樹的極端情況的退化問題。
    • 缺點:檢索時間依舊與樹的高度有關限煞,當數(shù)據(jù)量很大時抹恳,樹的高度就會很高,檢索的次數(shù)就會比較多署驻,檢索的時間會比較久奋献,效率低。


      image

      (圖片采自51CTO公眾號)

  4. B樹:B樹是一種多路搜索樹硕舆,每個子節(jié)點可以擁有多于2個子節(jié)點秽荞,M路的B樹最多可擁有M個子節(jié)點。設計成多路抚官,其目的是為了降低樹的高度扬跋,降低查詢次數(shù),提高查詢效率凌节。

    • 雖然多路可以降低樹的高度钦听,但是如果設計成無限多路,就會退化成有序數(shù)組倍奢,一般B樹的使用場景是用于文件的索引朴上,這些索引會存放于硬盤中,有時內(nèi)存是無法一次性加載完卒煞,此時就無法進行查找痪宰。
    • 如果全部在內(nèi)存中,紅黑樹的查找效率要高于B樹畔裕,但是涉及到磁盤操作衣撬,B樹要優(yōu)于紅黑樹,所以在JDK1.8版本的HashMap中扮饶,如果單個桶的鏈表長度多于8或全部桶的鏈表總長度多余64具练,會將鏈表轉(zhuǎn)換成紅黑樹。


      Image

      (圖片采自51CTO公眾號)

  5. B+樹:B+樹是對于B樹進行優(yōu)化的多路搜索樹甜无,主要設計是將數(shù)據(jù)全部存放于葉子節(jié)點扛点,并將葉子節(jié)點用指針進行鏈表鏈接。

    • 主要使用場景:常用于數(shù)據(jù)庫的索引岂丘。
      • 數(shù)據(jù)庫的索引一般數(shù)據(jù)量不小陵究,同時又存放于磁盤中,采用多路搜索樹奥帘,可以降低樹的高度畔乙,同時在大數(shù)據(jù)量下可以分批載入內(nèi)存,提高查詢效率翩概。
      • 不同于B樹的使用場景牲距,數(shù)據(jù)庫的查詢中返咱,我們一般查詢的數(shù)量不會是單條數(shù)據(jù),例如列表常用查詢中的分頁查詢--查詢第1頁的10條數(shù)據(jù)牍鞠,此時如果采用B樹咖摹,需要進行樹的中序遍歷,可能需要跨層訪問难述。
      • 而B+樹的所有數(shù)據(jù)全部存放于葉子節(jié)點上萤晴,且葉子節(jié)點之間采用指針進行鏈表鏈接,一次查詢多條時胁后,確定首尾位置店读,便可以方便的確定多條數(shù)據(jù)位置。


        Image

        (圖片采自51CTO公眾號)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攀芯,一起剝皮案震驚了整個濱河市屯断,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌侣诺,老刑警劉巖殖演,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異年鸳,居然都是意外死亡趴久,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門搔确,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彼棍,“玉大人,你說我怎么就攤上這事膳算±乃郑” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵畦幢,是天一觀的道長。 經(jīng)常有香客問我缆蝉,道長宇葱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任刊头,我火速辦了婚禮黍瞧,結果婚禮上,老公的妹妹穿的比我還像新娘原杂。我一直安慰自己印颤,他們只是感情好,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布穿肄。 她就那樣靜靜地躺著年局,像睡著了一般际看。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矢否,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天仲闽,我揣著相機與錄音,去河邊找鬼僵朗。 笑死赖欣,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的验庙。 我是一名探鬼主播顶吮,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粪薛!你這毒婦竟也來了悴了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤汗菜,失蹤者是張志新(化名)和其女友劉穎让禀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陨界,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡巡揍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了菌瘪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腮敌。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖俏扩,靈堂內(nèi)的尸體忽然破棺而出糜工,到底是詐尸還是另有隱情,我是刑警寧澤录淡,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布捌木,位于F島的核電站,受9級特大地震影響嫉戚,放射性物質(zhì)發(fā)生泄漏刨裆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一彬檀、第九天 我趴在偏房一處隱蔽的房頂上張望帆啃。 院中可真熱鬧,春花似錦窍帝、人聲如沸努潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疯坤。三九已至报慕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贴膘,已是汗流浹背卖子。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刑峡,地道東北人洋闽。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像突梦,于是被迫代替她去往敵國和親诫舅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

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