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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql 索引 二叉树_MySQL 的索引,为什么是 B+而不是平衡二叉树

發布時間:2023/11/27 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 索引 二叉树_MySQL 的索引,为什么是 B+而不是平衡二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據庫為什么使用 B+ 樹?

前言

講到索引,第一反應肯定是能提高查詢效率。例如書的目錄,想要查找某一章節,會先從目錄中定位。如果沒有目錄,那么就需要將所有內容都看一遍才能找到。

索引的設計對程序的性能至關重要,若索引太少,對查詢性能受影響;而如果索引太多,則會影響增/改/刪等的性能。

知識點

MySQL 中一般支持以下幾種常見的索引:

B+樹索引

全文索引

哈希索引

我們今天重點來講下 B+樹索引,以及為什么要用 B+樹來作為索引的數據結構。

B+樹索引并不能直接找到具體的行,只是找到被查找行所在的頁,然后 DB 通過把整頁讀入內存,再在內存中查找。

1. 與二叉樹相比

二叉樹相比于順序查找的確減少了查找次數,但是在最壞情況下,二叉樹有可能退化為順序查找。而且就二叉樹本身來說,當數據庫的數據量特別大時,其層數也將特別大。二叉樹的高度一般是 log_2^n,B 樹的高度是 log_t^((n+1)/2) + 1,其高度約比 B 樹大 lgt 倍。n 是節點總數,t 是樹的最小度數。

2. 與 B樹相比

B 樹在提高 IO 性能的同時,并沒與解決元素遍歷時效率低下的問題,正是為了解決這個問題,B+數應運而生。B+數只需遍歷葉子節點即可實現整棵樹的遍歷,而 B 樹必須使用中序遍歷按序掃庫,B+樹支持范圍查詢非常方便。這才是數據庫選用 B+樹的主要原因。

另外,最后說一下,并不是說 B+樹就比 B 樹好,有很多基于頻率的搜索是選用 B樹,越頻繁 query 的結點越往根上走,前提是需要對 query 做統計,而且要對 key做一些變化。

無論是 B 樹還是 B+樹由于前邊幾層反復 query,因此早已被加載入內存,不會出現讀磁盤 IO。一般啟動的時候,就會主動換入內存。在內存中 B+樹并沒有優勢,只有在磁盤中 B+樹的威力才能顯現。

采用 B+ 樹的索引結構優點:

B+樹的高度一般為 2-4 層,所以查找記錄時最多只需要 2-4 次 IO,相對二叉平衡樹已經大

大降低了。

范圍查找時,能通過葉子節點的指針獲取數據。例如查找大于等于 3 的數據,當在葉子節點

中查到 3 時,通過 3 的尾指針便能獲取所有數據,而不需要再像二叉樹一樣再獲取到 3 的

父節點。

總結:

1)二叉查找樹(BST):解決了排序的基本問題,但是由于無法保證平衡,可能退化為鏈表

2)平衡二叉樹(AVⅥL):通過旋轉解決了平衡的問題,但是旋轉操作效率太低

3)紅黑樹:通過舍棄嚴格的平衡和引入紅黑節點,解決了 AⅥ旋轉效率過低的問題,但是在磁盤等場景下,樹仍然太高,IO 次數太多

4)B 樹:通過將二叉樹改為多路平衡查找樹,解決了樹過高的問題

5)B+樹:在 B 樹的基礎上,將非葉節點改造為不存儲數據的純索引節點,進一步降低了樹的高度;此外將葉節點使用指針連接成鏈表,范圍查詢更加高效。

總結

以上是生活随笔為你收集整理的mysql 索引 二叉树_MySQL 的索引,为什么是 B+而不是平衡二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

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

歡迎分享!

轉載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:mysql 索引 二叉树_MySQL 的索引,为什么是 B