婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL用B+樹作為索引結(jié)構(gòu)有什么好處

MySQL用B+樹作為索引結(jié)構(gòu)有什么好處

熱門標(biāo)簽:啥是企業(yè)400電話辦理 地圖標(biāo)注費用是多少 南昌三維地圖標(biāo)注 電話外呼系統(tǒng)改號 百應(yīng)電話機器人優(yōu)勢 武漢網(wǎng)絡(luò)外呼系統(tǒng)服務(wù)商 怎樣在地圖標(biāo)注銷售區(qū)域 外呼系統(tǒng)打電話上限是多少 曲靖移動外呼系統(tǒng)公司

前言

在MySQL中,無論是Innodb還是MyIsam,都使用了B+樹作索引結(jié)構(gòu)(這里不考慮hash等其他索引)。本文將從最普通的二叉查找樹開始,逐步說明各種樹解決的問題以及面臨的新問題,從而說明MySQL為什么選擇B+樹作為索引結(jié)構(gòu)。

一、二叉查找樹(BST):不平衡

二叉查找樹(BST,Binary Search Tree),也叫二叉排序樹,在二叉樹的基礎(chǔ)上需要滿足:任意節(jié)點的左子樹上所有節(jié)點值不大于根節(jié)點的值,任意節(jié)點的右子樹上所有節(jié)點值不小于根節(jié)點的值。如下是一顆BST:

當(dāng)需要快速查找時,將數(shù)據(jù)存儲在BST是一種常見的選擇,因為此時查詢時間取決于樹高,平均時間復(fù)雜度是O(lgn)。然而,BST可能長歪而變得不平衡,如下圖所示,此時BST退化為鏈表,時間復(fù)雜度退化為O(n)。

為了解決這個問題,引入了平衡二叉樹。

二、平衡二叉樹(AVL):旋轉(zhuǎn)耗時

AVL樹是嚴(yán)格的平衡二叉樹,所有節(jié)點的左右子樹高度差不能超過1;AVL樹查找、插入和刪除在平均和最壞情況下都是O(lgn)。

AVL實現(xiàn)平衡的關(guān)鍵在于旋轉(zhuǎn)操作:插入和刪除可能破壞二叉樹的平衡,此時需要通過一次或多次樹旋轉(zhuǎn)來重新平衡這個樹。當(dāng)插入數(shù)據(jù)時,最多只需要1次旋轉(zhuǎn)(單旋轉(zhuǎn)或雙旋轉(zhuǎn));但是當(dāng)刪除數(shù)據(jù)時,會導(dǎo)致樹失衡,AVL需要維護(hù)從被刪除節(jié)點到根節(jié)點這條路徑上所有節(jié)點的平衡,旋轉(zhuǎn)的量級為O(lgn)。

由于旋轉(zhuǎn)的耗時,AVL樹在刪除數(shù)據(jù)時效率很低;在刪除操作較多時,維護(hù)平衡所需的代價可能高于其帶來的好處,因此AVL實際使用并不廣泛。

三、紅黑樹:樹太高

與AVL樹相比,紅黑樹并不追求嚴(yán)格的平衡,而是大致的平衡:只是確保從根到葉子的最長的可能路徑不多于最短的可能路徑的兩倍長。從實現(xiàn)來看,紅黑樹最大的特點是每個節(jié)點都屬于兩種顏色(紅色或黑色)之一,且節(jié)點顏色的劃分需要滿足特定的規(guī)則(具體規(guī)則略)。紅黑樹示例如下:

與AVL樹相比,紅黑樹的查詢效率會有所下降,這是因為樹的平衡性變差,高度更高。但紅黑樹的刪除效率大大提高了,因為紅黑樹同時引入了顏色,當(dāng)插入或刪除數(shù)據(jù)時,只需要進(jìn)行O(1)次數(shù)的旋轉(zhuǎn)以及變色就能保證基本的平衡,不需要像AVL樹進(jìn)行O(lgn)次數(shù)的旋轉(zhuǎn)??偟膩碚f,紅黑樹的統(tǒng)計性能高于AVL。

因此,在實際應(yīng)用中,AVL樹的使用相對較少,而紅黑樹的使用非常廣泛。例如,Java中的TreeMap使用紅黑樹存儲排序鍵值對;Java8中的HashMap使用鏈表+紅黑樹解決哈希沖突問題(當(dāng)沖突節(jié)點較少時,使用鏈表,當(dāng)沖突節(jié)點較多時,使用紅黑樹)。

對于數(shù)據(jù)在內(nèi)存中的情況(如上述的TreeMap和HashMap),紅黑樹的表現(xiàn)是非常優(yōu)異的。但是對于數(shù)據(jù)在磁盤等輔助存儲設(shè)備中的情況(如MySQL等數(shù)據(jù)庫),紅黑樹并不擅長,因為紅黑樹長得還是太高了。當(dāng)數(shù)據(jù)在磁盤中時,磁盤IO會成為最大的性能瓶頸,設(shè)計的目標(biāo)應(yīng)該是盡量減少IO次數(shù);而樹的高度越高,增刪改查所需要的IO次數(shù)也越多,會嚴(yán)重影響性能。

四、B樹:為磁盤而生

B樹也稱B-樹(其中不是減號),是為磁盤等輔存設(shè)備設(shè)計的多路平衡查找樹,與二叉樹相比,樹的每個非葉節(jié)點可以有多個子樹。因此,當(dāng)總節(jié)點數(shù)量相同時,B樹的高度遠(yuǎn)遠(yuǎn)小于AVL樹和紅黑樹(B樹是一顆“矮胖子”),磁盤IO次數(shù)大大減少。

定義B樹最重要的概念是階數(shù)(Order),對于一顆m階B樹,需要滿足以下條件:

  • 每個節(jié)點最多包含 m 個子節(jié)點。
  • 如果根節(jié)點包含子節(jié)點,則至少包含 2 個子節(jié)點;除根節(jié)點外,每個非葉節(jié)點至少包含 m/2 個子節(jié)點。
  • 擁有 k 個子節(jié)點的非葉節(jié)點將包含 k - 1 條記錄。
  • 所有葉節(jié)點都在同一層中。

可以看出,B樹的定義,主要是對非葉結(jié)點的子節(jié)點數(shù)量和記錄數(shù)量的限制。

下圖是一個3階B樹的例子:

B樹的優(yōu)勢除了樹高小,還有對訪問局部性原理的利用。所謂局部性原理,是指當(dāng)一個數(shù)據(jù)被使用時,其附近的數(shù)據(jù)有較大概率在短時間內(nèi)被使用。B樹將鍵相近的數(shù)據(jù)存儲在同一個節(jié)點,當(dāng)訪問其中某個數(shù)據(jù)時,數(shù)據(jù)庫會將該整個節(jié)點讀到緩存中;當(dāng)它臨近的數(shù)據(jù)緊接著被訪問時,可以直接在緩存中讀取,無需進(jìn)行磁盤IO;換句話說,B樹的緩存命中率更高。

B樹在數(shù)據(jù)庫中有一些應(yīng)用,如mongodb的索引使用了B樹結(jié)構(gòu)。但是在很多數(shù)據(jù)庫應(yīng)用中,使用了是B樹的變種B+樹。

五、B+樹

B+樹也是多路平衡查找樹,其與B樹的區(qū)別主要在于:

  • B樹中每個節(jié)點(包括葉節(jié)點和非葉節(jié)點)都存儲真實的數(shù)據(jù),B+樹中只有葉子節(jié)點存儲真實的數(shù)據(jù),非葉節(jié)點只存儲鍵。在MySQL中,這里所說的真實數(shù)據(jù),可能是行的全部數(shù)據(jù)(如Innodb的聚簇索引),也可能只是行的主鍵(如Innodb的輔助索引),或者是行所在的地址(如MyIsam的非聚簇索引)。
  • B樹中一條記錄只會出現(xiàn)一次,不會重復(fù)出現(xiàn),而B+樹的鍵則可能重復(fù)重現(xiàn)——一定會在葉節(jié)點出現(xiàn),也可能在非葉節(jié)點重復(fù)出現(xiàn)。
  • B+樹的葉節(jié)點之間通過雙向鏈表鏈接。
  • B樹中的非葉節(jié)點,記錄數(shù)比子節(jié)點個數(shù)少1;而B+樹中記錄數(shù)與子節(jié)點個數(shù)相同。

由此,B+樹與B樹相比,有以下優(yōu)勢:

  • **更少的IO次數(shù):**B+樹的非葉節(jié)點只包含鍵,而不包含真實數(shù)據(jù),因此每個節(jié)點存儲的記錄個數(shù)比B數(shù)多很多(即階m更大),因此B+樹的高度更低,訪問時所需要的IO次數(shù)更少。此外,由于每個節(jié)點存儲的記錄數(shù)更多,所以對訪問局部性原理的利用更好,緩存命中率更高。
  • **更適于范圍查詢:**在B樹中進(jìn)行范圍查詢時,首先找到要查找的下限,然后對B樹進(jìn)行中序遍歷,直到找到查找的上限;而B+樹的范圍查詢,只需要對鏈表進(jìn)行遍歷即可。
  • **更穩(wěn)定的查詢效率:**B樹的查詢時間復(fù)雜度在1到樹高之間(分別對應(yīng)記錄在根節(jié)點和葉節(jié)點),而B+樹的查詢復(fù)雜度則穩(wěn)定為樹高,因為所有數(shù)據(jù)都在葉節(jié)點。

B+樹也存在劣勢:由于鍵會重復(fù)出現(xiàn),因此會占用更多的空間。但是與帶來的性能優(yōu)勢相比,空間劣勢往往可以接受,因此B+樹的在數(shù)據(jù)庫中的使用比B樹更加廣泛。

六、感受B+樹的威力

前面說到,B樹/B+樹與紅黑樹等二叉樹相比,最大的優(yōu)勢在于樹高更小。實際上,對于Innodb的B+索引來說,樹的高度一般在2-4層。下面來進(jìn)行一些具體的估算。

樹的高度是由階數(shù)決定的,階數(shù)越大樹越矮;而階數(shù)的大小又取決于每個節(jié)點可以存儲多少條記錄。Innodb中每個節(jié)點使用一個頁(page),頁的大小為16KB,其中元數(shù)據(jù)只占大約128字節(jié)左右(包括文件管理頭信息、頁面頭信息等等),大多數(shù)空間都用來存儲數(shù)據(jù)。

  • 對于非葉節(jié)點,記錄只包含索引的鍵和指向下一層節(jié)點的指針。假設(shè)每個非葉節(jié)點頁面存儲1000條記錄,則每條記錄大約占用16字節(jié);當(dāng)索引是整型或較短的字符串時,這個假設(shè)是合理的。延伸一下,我們經(jīng)常聽到建議說索引列長度不應(yīng)過大,原因就在這里:索引列太長,每個節(jié)點包含的記錄數(shù)太少,會導(dǎo)致樹太高,索引的效果會大打折扣,而且索引還會浪費更多的空間。
  • 對于葉節(jié)點,記錄包含了索引的鍵和值(值可能是行的主鍵、一行完整數(shù)據(jù)等,具體見前文),數(shù)據(jù)量更大。這里假設(shè)每個葉節(jié)點頁面存儲100條記錄(實際上,當(dāng)索引為聚簇索引時,這個數(shù)字可能不足100;當(dāng)索引為輔助索引時,這個數(shù)字可能遠(yuǎn)大于100;可以根據(jù)實際情況進(jìn)行估算)。

對于一顆3層B+樹,第一層(根節(jié)點)有1個頁面,可以存儲1000條記錄;第二層有1000個頁面,可以存儲1000 * 1000條記錄;第三層(葉節(jié)點)有1000 * 1000個頁面,每個頁面可以存儲100條記錄,因此可以存儲1000 * 1000 * 100條記錄,即1億條。而對于二叉樹,存儲1億條記錄則需要26層左右。

七、總結(jié)

最后,總結(jié)一下各種樹解決的問題以及面臨的新問題:

  1. 二叉查找樹(BST):解決了排序的基本問題,但是由于無法保證平衡,可能退化為鏈表;
  2. 平衡二叉樹(AVL):通過旋轉(zhuǎn)解決了平衡的問題,但是旋轉(zhuǎn)操作效率太低;
  3. 紅黑樹:通過舍棄嚴(yán)格的平衡和引入紅黑節(jié)點,解決了AVL旋轉(zhuǎn)效率過低的問題,但是在磁盤等場景下,樹仍然太高,IO次數(shù)太多
  4. B樹:通過將二叉樹改為多路平衡查找樹,解決了樹過高的問題;
  5. B+樹:在B樹的基礎(chǔ)上,將非葉節(jié)點改造為不存儲數(shù)據(jù)的純索引節(jié)點,進(jìn)一步降低了樹的高度;此外將葉節(jié)點使用指針連接成鏈表,范圍查詢更加高效。

以上就是MySQL用B+樹作為索引結(jié)構(gòu)有什么好處的詳細(xì)內(nèi)容,更多關(guān)于MySQL B+樹索引結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • mysql 使用B+樹索引有哪些優(yōu)勢
  • 為什么MySQL數(shù)據(jù)庫索引選擇使用B+樹?
  • MySQL的索引系統(tǒng)采用B+樹的原因解析

標(biāo)簽:隨州 荊州 甘南 吉林 錦州 滄州 黑河 資陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL用B+樹作為索引結(jié)構(gòu)有什么好處》,本文關(guān)鍵詞  MySQL,用,樹,作為,索引,結(jié)構(gòu),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL用B+樹作為索引結(jié)構(gòu)有什么好處》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL用B+樹作為索引結(jié)構(gòu)有什么好處的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美电影精品一区二区| 激情欧美一区二区| 亚洲黄色小视频| 日韩天堂在线观看| 国产久卡久卡久卡久卡视频精品| 日韩精品一区二区三区视频播放| 国产精品剧情在线亚洲| 自拍偷拍欧美精品| 黄页视频在线91| 欧美日韩电影在线播放| 亚洲一区中文日韩| 这里只有精品视频在线观看| 亚洲图片一区二区| 在线精品视频免费播放| 亚洲四区在线观看| 欧美日韩免费一区二区三区| 亚洲一区成人在线| 日韩视频在线你懂得| 久久99国产精品麻豆| 欧美久久久一区| 精品一区二区三区在线视频| 精品国产一区二区三区久久影院| 国产二区国产一区在线观看| 亚洲欧美另类久久久精品| 欧美日本一道本在线视频| 韩国欧美国产一区| 亚洲无人区一区| 国产精品久线观看视频| 色综合久久六月婷婷中文字幕| 亚洲mv大片欧洲mv大片精品| 久久久亚洲精品一区二区三区| 在线精品视频免费观看| 本田岬高潮一区二区三区| 日本女优在线视频一区二区| 亚洲欧洲日本在线| 国产午夜一区二区三区| 91福利在线导航| 99re这里只有精品视频首页| 成人午夜精品一区二区三区| 亚洲成人一区在线| 亚洲欧美日韩久久精品| 国产精品你懂的| 最新久久zyz资源站| 久久无码av三级| 91麻豆国产香蕉久久精品| 激情综合色综合久久| 国产精品中文有码| 国产麻豆视频精品| 亚洲国产一区二区a毛片| 亚洲一二三区在线观看| 国产精品第一页第二页第三页| 久久综合99re88久久爱| 国产农村妇女毛片精品久久麻豆| 精品国产乱码久久久久久蜜臀| 日韩欧美在线影院| 国产肉丝袜一区二区| 一区二区三区在线视频观看| 香蕉av福利精品导航| 青青草97国产精品免费观看无弹窗版| 日韩不卡一区二区| 大桥未久av一区二区三区中文| 91网址在线看| 精品国精品自拍自在线| 亚洲欧美日韩小说| 国产美女精品一区二区三区| 99久久精品国产麻豆演员表| 欧美高清你懂得| 亚洲黄色av一区| 福利91精品一区二区三区| 欧美xxxxx裸体时装秀| 亚洲同性同志一二三专区| 亚洲va国产天堂va久久en| 国产69精品久久99不卡| 欧美精品 日韩| 中文字幕一区三区| 成人午夜电影久久影院| 久久一二三国产| 久久se这里有精品| 日韩网站在线看片你懂的| 亚洲一区中文日韩| 91视频你懂的| 日韩国产精品大片| 欧美日本韩国一区二区三区视频| 国产精品成人午夜| av午夜一区麻豆| 欧美tk—视频vk| 国产一区二区三区美女| 国产精品丝袜91| 99这里都是精品| 一区二区视频在线| 99久久精品国产网站| 国产精品不卡在线观看| 99精品视频一区| 一区二区三区精品久久久| 久久久久久久久99精品| 老司机午夜精品| 国产清纯白嫩初高生在线观看91| 北岛玲一区二区三区四区| 亚洲三级电影网站| 337p粉嫩大胆噜噜噜噜噜91av| 成人黄色综合网站| 一区二区三区美女| 欧美一区二区播放| 欧美在线视频全部完| 国产在线不卡一区| 亚洲一区二区影院| 国产精品少妇自拍| 欧美福利电影网| 在线免费亚洲电影| 成人免费电影视频| 国产二区国产一区在线观看| 青青青爽久久午夜综合久久午夜| 中文字幕日本乱码精品影院| 日韩免费在线观看| 日韩美女一区二区三区四区| 91成人网在线| 欧美视频中文一区二区三区在线观看| 狠狠色丁香久久婷婷综合_中| 亚洲综合久久久| 亚洲不卡在线观看| 午夜视频在线观看一区二区三区| 中文字幕在线观看不卡视频| 久久久一区二区| 国产精品久久一级| 亚洲精品一二三| 亚洲成人av电影| 全部av―极品视觉盛宴亚洲| 久久精品国产免费看久久精品| 蜜桃av噜噜一区二区三区小说| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲成人av资源| 免费看日韩a级影片| 粗大黑人巨茎大战欧美成人| 日本一区二区在线不卡| 久久影院午夜片一区| 国产精品精品国产色婷婷| 一区二区欧美国产| 美腿丝袜在线亚洲一区| 美女在线视频一区| 久久91精品国产91久久小草 | 久久精品国产久精国产爱| 日一区二区三区| 国产成人久久精品77777最新版本| 97se亚洲国产综合自在线| 91成人在线精品| 国产日韩欧美精品一区| 香港成人在线视频| 91激情五月电影| 国产精品久久久久影视| 国产精品123| 国产精品久久久久久久久图文区| 人人狠狠综合久久亚洲| 成人福利视频在线| 亚洲国产精品成人久久综合一区| 日韩在线播放一区二区| 欧美中文字幕不卡| 欧美国产综合色视频| 日韩成人免费电影| 日韩精品一区国产麻豆| 亚洲一区二区综合| 91久久香蕉国产日韩欧美9色| 国产精品私房写真福利视频| 国产精品一区二区x88av| 久久久天堂av| 成人午夜视频在线观看| 国产欧美日韩在线| 成人午夜精品一区二区三区| 国产日韩三级在线| 激情文学综合丁香| 国产日韩欧美精品综合| 国产69精品一区二区亚洲孕妇| 国产亚洲欧美色| 色呦呦国产精品| 亚洲精品综合在线| 国产精品久久毛片av大全日韩| 91一区二区在线观看| 一区二区三区影院| 91视频免费看| 国产精品国产自产拍在线| 美女视频黄久久| 国产91精品在线观看| 国产永久精品大片wwwapp| 高清日韩电视剧大全免费| 成人福利视频网站| 2023国产精华国产精品| 中文字幕一区二区三区精华液| 国产精品黄色在线观看| 亚洲欧美电影院| 欧洲中文字幕精品| 久久久亚洲国产美女国产盗摄 | 日本免费在线视频不卡一不卡二| 免费成人美女在线观看| 91.成人天堂一区| 全国精品久久少妇| 中文成人av在线| 精品在线一区二区三区| 欧美精品视频www在线观看 | 亚洲午夜久久久久中文字幕久| 成人一区二区三区在线观看| 制服丝袜成人动漫|