日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

MySQL索引數據結構

下面列舉了常見的數據結構

  • 二叉樹
  • 紅黑樹
  • Hash表
  • B-Tree(B樹)

Select * from t where t.col=5

我們在執行一條查詢的Sql語句時候,在數據量比較大又不加索引的情況下,逐行查詢并進行比對,每次需要從磁盤上查找,每行數據可能在磁盤不同的位置,數據比較靠后的話,一千萬數據可能要比對幾百萬,很耗費資源。

Mysql衡量查詢效率的就是磁盤IO次數,那么Mysql中應該采用什么樣的數據結構存儲數據呢,以及為什么要使用那個數據結構呢。

二叉樹

大多數人都知道,如果加上索引之后。把數據放在二叉樹里面,查詢會快很多,但是還有一種特殊的情況:

把一個遞增列的索引放入二叉樹中,列id作為等于5查詢目標,就會從col為1開始搜索,**這樣要搜索幾次?**二叉樹插入的數據如果大于本身,會放在父節點的右下角,小的會放在父節點的左下角,因此形成了這樣像鏈表一樣的結構,其實本質還是二叉樹。

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

需要從根節點遍歷,經過5次的查找,每個節點都存儲在磁盤上,每查一個節點需要跟磁盤做一次IO交互,效率相比之前沒加索引也沒有太大提升,這顯然不是Mysql的索引結構。

紅黑樹

HasMap的數據結構就是紅黑樹,原來是數組加鏈表,現在優化到了數組加紅黑樹。

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

紅黑樹本質還是二叉樹,還有一個名字又叫平衡二叉樹。當一邊子節點比另一邊高太多的時候,會自動旋轉平衡。當數據量比較大的時候比如1000萬,紅黑樹存儲的高度就可能達到幾十。如果數據量越大樹的高度就會越高。每查一個節點要進行一次磁盤IO交互。樹的高的越高查找效率越低,很顯然紅黑樹也不是Mysql的數據結構,早期版本Mysql有用到紅黑樹,現在版本沒有用到紅黑樹。那么能不能對紅黑樹做點改造。

B-Tree

樹的高的越高查找效率越低,那么將樹高縮小,比如限制在5層,把一層存放更多元素。把一個節點的數據在磁盤同一個區域全部查出來放到內存,只做一次IO查找,就可以查到很多索引信息。B樹又叫平衡多叉樹。

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

索引值和具體data都在每個節點里,而節點的位置不固定,最好的情況查找值就在第一層。

B樹的特點就是每層節點數目非常多,層數很少,目的就是為了減少磁盤IO次數,B樹在提高了磁盤IO性能的同時并沒有解決元素遍歷的效率低下的問題,由于節點內部每個 key 都帶著 data 域,每次查找到具體節點還要和data進行順序比對,如果查找某個范圍內數據,又需要重新遍歷。正是為了解決這個問題,B+樹應運而生

B樹遍歷全部數據:

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

B+Tree

B+樹節點只存儲 key 的副本,真實的 key 和 data 域都在葉子節點存儲,數據全部存儲在葉子節,并且每一個節點之間用指針串聯起來,形成鏈表,方便遍歷,可以跨區間訪問,這優點尤其突出在范圍查詢,不需要在一次從根節點到子節點遍歷。

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

B+樹遍歷全部數據:

Mysql索引數據結構有多個選擇,為什么一定要是B+樹?

 

數據量大的情況下哪個更快,我想你應該知道了吧!

分享到:
標簽:索引 Mysql
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定