Mysql 索引底層結構探索

2021-08-21 16:20:46 字數 1157 閱讀 9046

索引用於提高資料庫表的資料訪問速度的一種資料結構,binary search trees、red-black trees、b trees、b+ trees,這些都可以用來做索引,為什麼mysql偏偏選擇b+ trees呢?下面我們就來分析一下原因

衡量乙個索引是否高效:io漸進複雜度

binary search trees (二叉搜尋樹)是乙個線性結構,隨著資料的增加,樹的高度越來越高,後面的查詢越來越深,還沒有每個節點只能儲存乙個資料

red-black trees (紅黑樹)比二叉搜尋樹 稍微好一點,存在的問題一樣,樹的高度越來越高,後面的查詢越來越深,還沒有每個節點只能儲存乙個資料

b trees 可以有效的控制樹的高度,減少訪問的次數,每個內部節點儲存鍵和資料

b+ trees 的每個內部節點只儲存鍵,葉子節點儲存資料

到這裡有人就會有疑問了,為啥說b+tree就可以控制樹的高度呢(b-tree 也可以,後面再說它們的區別),因為每個節點可以橫向擴張,當足夠大時,高度就可以限制一定範圍。

b+ trees與b trees乙個很大的不同就是b+ trees的內部節點是不儲存資料,儲存只是鍵值,在相同空間下,乙個內部節點可以儲存到更多的子節點。也就是說可以讓整棵樹更低

曾經很疑惑 b+ trees 這麼多優點為什麼還會有二叉樹以及b樹或者紅黑樹的存在呢?

重點在於:b+ trees 不能在內部節點中儲存資料,這就意味著訪問所有資料都需要向下訪問到葉子節點才能獲取到資料。雖然這會帶來比較平均的訪問效能,但是不能針對某項資料進行優化

例如上個圖中,訪問數字 1 和 6 開銷是一樣的,即使你訪問了數字 1 1000次,而訪問數字 6 只有一次,但是b trees 和 二叉樹就沒有這個問題,內部節點可以關聯衛星資料。

mysql索引底層結構分析

什麼是索引,索引說白了就是一種提高查詢效率的資料結構,mysql底層是用b tree來實現的 分析b tree之前,我們先來看下其他的幾種資料結構之間的區別以及mysql為什麼底層是選擇用b tree來實現索引的 這邊網上看到一篇介紹資料結構的,可以參考 常見的幾種索引資料結構 1.二叉樹 2.紅黑...

mysql底層 索引

mysql只是乙個應用軟體,不能直接讀取磁碟上的資料,當我們需要讀取某條資料的時候,mysql呼叫核心的乙個函式,告訴核心我要讀取某個資料,核心驅動磁柱磁頭去讀取資料,讀取資料之後怎麼返回裡,其實是把資料寫到記憶體中了 這個記憶體只是核心記憶體,並不是mysql記憶體 接下來再把資料copy到mys...

mysql索引底層

資料結構 二叉樹 從父節點開始,大的往右,小的往左,當有序的增長就變成了單邊增長,就會對效能沒什麼提公升,不適合 紅黑樹 二叉樹的平衡版,通過自旋等方式實現平衡 當資料很多時,紅黑樹的高度就變得很高,查詢一次需要多次的io不適合大資料查詢 b樹和b 樹 乙個節點都可以存多個元素 多叉樹 以有序的方式...