深入理解mysql B+tree索引機制
一: 理解清楚索引定義和工作原理
索引的定義:索引是為了加速對表中數據行的檢索而創建的一種分散存儲的數據結構
工作機制:

二:MySQL為什么選擇B+tree
1:二叉查找樹

2:平衡二叉查找樹

缺點:2.1:搜索效率不足:
一般來說,樹結構中數據的深度決定它的搜索io次數
2.2:節點數據內容太少
每一個磁盤塊(節點/頁)保存的關鍵字數據量太少
沒有很好利用操作系統和磁盤數據的交換特性(最少4BK)和磁盤預讀能力(空間局部性原理)
3:B tree(多路平衡查找樹)

缺點:3.1 非葉子節點,保存了數據區,減少了關鍵字(相對於B+tree)
4:B+tree(加強版多路平衡查找樹)

優點:B+節點關鍵字搜索采用閉合區間
B+非葉子節點不保存數據相關信息,只保存關鍵字和子節點的引用
B+關鍵字對應的數據保存在葉子節點中
B+葉子結點是順序排列的,並且相鄰節點具有順序引用關系
通過比較B數的數據結構,得出MySQL為什么選擇B+tree
·B+樹是B樹的加強版,它擁有B樹的優勢
·B+樹掃庫,掃表能力更強
·B+樹的磁盤讀寫能力更強
·B+樹的排序能力更強
·B+樹的查詢效率更加穩定
三:MySQL中B+tree索引是如何落地
1: myisam引擎

2:Inodb引擎

四:理解MySQL索引的幾個原則
1:列的離散性(離散性越高,選擇性越好) 計算公式 count(distinct(column)):count(column)
2:最左匹配原則,對索引中關鍵字進行對比,一定是從左往右依次進行且不可跳過
五:So easy,索引不過如此
《 索引無敵》
全值匹配我最愛,最左前綴要遵守;
帶頭大哥不能死,中間兄弟不能斷;
索引列上少計算,范圍之后全失效;
like百分寫最左,覆蓋索引不寫*;
不等空值還有or,索引失效要少用;
