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

歡迎訪問 生活随笔!

生活随笔

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

数据库

数据库索引为什么使用B+树?

發布時間:2024/9/30 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据库索引为什么使用B+树? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

B tree: 二叉樹(Binary tree),每個節點只能存儲一個數。
**B-tree:**B樹(B-Tree,并不是B“減”樹,橫杠為連接符,容易被誤導)
B樹屬于多叉樹又名平衡多路查找樹。每個節點可以多個數(由磁盤大小決定)。
B+treeB*tree 都是 B-tree的變種

索引為什么是用B樹呢?

一般來說,索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲的磁盤上。這樣的話,索引查找過程中就要產生磁盤I/O消耗,相對于內存存取,I/O存取的消耗要高幾個數量級,所以評價一個數據結構作為索引的優劣最重要的指標就是在查找過程中磁盤I/O操作次數的漸進復雜度。換句話說,索引的結構組織要盡量減少查找過程中磁盤I/O的存取次數。而B-/+/*Tree,經過改進可以有效的利用系統對磁盤的塊讀取特性,在讀取相同磁盤塊的同時,盡可能多的加載索引數據,來提高索引命中效率,從而達到減少磁盤IO的讀取次數。

不了解磁盤相關知識的可以查看 硬盤基本知識(磁頭、磁道、扇區、柱面)

下面通過示意圖來看一下,B-tree、B+tree、B*tree

B-tree


從圖中可以看出,B-tree 利用了磁盤塊的特性進行構建的樹。每個磁盤塊一個節點,每個節點包含了很關鍵字。把樹的節點關鍵字增多后樹的層級比原來的二叉樹少了,減少數據查找的次數和復雜度。

B-tree巧妙利用了磁盤預讀原理,將一個節點的大小設為等于一個頁(每頁為4K),這樣每個節點只需要一次I/O就可以完全載入。
B-tree 的數據可以存在任何節點中。

B+tree


B+tree 是 B-tree 的變種,數據只能存儲在葉子節點。

B+tree 是 B-tree 的變種,B+tree 數據只存儲在葉子節點中。這樣在B樹的基礎上每個節點存儲的關鍵字數更多,樹的層級更少所以查詢數據更快,所有指關鍵字指針都存在葉子節點,所以每次查找的次數都相同所以查詢速度更穩定;

如果每個節點能存放M個數據,每個節點的數據在M/2到M之間。預留出空間可以插入新的數據。

B*tree

B*tree 每個磁盤塊中又添加了對下一個磁盤塊的引用。這樣可以在當前磁盤塊滿時,不用擴容直接存儲到下一個臨近磁盤塊中。當兩個鄰近的磁盤塊都滿時,這兩個磁盤塊各分出1/3的數據重新分配一個磁盤塊,這樣這三個磁盤塊的數據都為2/3。

如果每個節點能存放M個數據,每個節點的數據在2M/3到M之間。預留出空間可以插入新的數據。

在B+樹的基礎上因其初始化的容量變大,使得節點空間使用率更高,而又存有兄弟節點的指針,可以向兄弟節點轉移關鍵字的特性使得B*樹額分解次數變得更少;


想了解更多精彩內容請關注我的公眾號

本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點擊這里快速進入簡書

GIT地址:http://git.oschina.net/brucekankan/
點擊這里快速進入GIT

總結

以上是生活随笔為你收集整理的数据库索引为什么使用B+树?的全部內容,希望文章能夠幫你解決所遇到的問題。

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