日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据库索引背后的数据结构

發布時間:2025/4/16 数据库 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库索引背后的数据结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在數據之外,數據庫系統還維護著滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。

B-Tree

B-Tree是一種平衡的多路**查找(又稱排序)**樹,在文件系統中和數據庫系統中有所應用。主要用作文件的索引。其中的B就表示平衡(Balance) 。

B-Tree的特性

為了描述B-Tree,首先定義一條數據記錄為一個二元組[key, data],key為記錄的鍵值,對于不同數據記錄,key是互不相同的;data為數據記錄除key外的數據。那么B-Tree是滿足下列條件的數據結構:

d為大于1的一個正整數,稱為B-Tree的度

h為一個正整數,稱為B-Tree的高度

key和指針互相間隔,節點兩端是指針

一個節點中的key從左到右非遞減排列

所有節點組成樹結構

每個指針要么為null,要么指向另外一個節點

每個非葉子節點由n-1個key和n個指針組成,其中d<=n<=2d

每個葉子節點最少包含一個key和兩個指針,最多包含2d-1個key和2d個指針,葉節點的指針均為null

所有葉節點具有相同的深度,等于樹高h

如果某個指針在節點node最左邊且不為null,則其指向節點的所有key小于key1,其中key1為node的第一個key的值

如果某個指針在節點node最右邊且不為null,則其指向節點的所有key大于keym,其中keym為node的最后一個key的值

如果某個指針在節點node的左右相鄰key分別是keyi和keyi+1且不為null,則其指向節點的所有key小于keyi+1且大于keyi

B-Tree查找數據

B-Tree是一個非常有效率的索引數據結構。這主要得益于B-Tree的度可以非常大,高度會變的非常小,只需要二分幾次就可以找到數據。例如一個度為d的B-Tree,設其索引N個key,則其樹高h的上限為logd((N+1)/2)),檢索一個key,其查找節點個數的漸進復雜度為O(logdN)。

在B-Tree中按key檢索數據的算法非常直觀:

  • 首先從根節點進行二分查找,如果找到則返回對應節點的data

  • 否則對相應區間的指針指向的節點遞歸進行查找,如果找到則返回對應節點的data

  • 如果找不到,則重復過程2,直到找到節點或找到null指針,前者查找成功,后者查找失敗。

    ?

  • B+Tree

    B+Tree是B-Tree的一種變種。一般來說,B+Tree比B-Tree更適合實現外存儲索引結構,具體原因與外存儲器原理及計算機存取原理有關,將在下篇文章中討論。

    B+Tree的特性

    區別于B-Tree:

    每個節點的指針上限為2d而不是2d+1

    內節點不存儲data,只存儲key;葉子節點不存儲指針

    帶有順序訪問指針的B+Tree

    一般在數據庫系統或者文件系統中,并不是直接使用B+Tree作為索引數據結構的,而是在B+Tree的基礎上做了優化,增加了順序訪問指針。提升了區間查詢的性能。

    如上圖所示,在B+Tree的每個葉子節點增加一個指向相鄰葉子節點的指針,就形成了帶有順序訪問指針的B+Tree。例如要查詢18到30之間的數據記錄,只要先找到18,然后順著順序訪問指針就可以訪問到所有的數據節點。這樣就提升了區間查詢的性能。數據庫的索引全掃描 index和索引范圍掃描 range 就是基于此實現的。

    參考

    MySQL索引背后的數據結構及算法原理



    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -----END-----

    ? ? ? ? ? ? ? ? ? ? 喜歡本文的朋友們,歡迎掃一掃下圖關注公眾號擼碼那些事,收看更多精彩內容

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


    總結

    以上是生活随笔為你收集整理的数据库索引背后的数据结构的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。