1. 程式人生 > >圖解MySQL索引---B-TREE(B+TREE)

圖解MySQL索引---B-TREE(B+TREE)

一、索引的分類

1️⃣從儲存結構上來劃分:BTree索引(B-Tree或B+Tree索引),Hash索引,full-index全文索引,R-Tree索引。

2️⃣從應用層次來分:普通索引,唯一索引,複合索引

3️⃣根據中資料的物理順序與鍵值的邏輯(索引)順序關係:聚集索引,非聚集索引。

​ 1️⃣中所描述的是索引儲存時儲存的形式,2️⃣是索引使用過程中進行的分類,兩者是不同層次上的劃分。不過平時講的索引型別一般是指在應用層次的劃分。

就像手機分類:安卓手機,IOS手機 與 華為手機,蘋果手機,OPPO手機一樣。

普通索引:即一個索引只包含單個列,一個表可以有多個單列索引

唯一索引:索引列的值必須唯一,但允許有空值

複合索引:即一個索引包含多個列

聚簇索引(聚集索引):並不是一種單獨的索引型別,而是一種資料儲存方式。具體細節取決於不同的實現,InnoDB的聚簇索引其實就是在同一個結構中儲存了B-Tree索引(技術上來說是B+Tree)和資料行。

非聚簇索引:不是聚簇索引,就是非聚簇索引(認真臉)。

二、索引的底層實現

mysql預設儲存引擎innodb只顯式支援B-Tree( 從技術上來說是B+Tree)索引,對於頻繁訪問的表,innodb會透明建立自適應hash索引,即在B樹索引基礎上建立hash索引,可以顯著提高查詢效率,對於客戶端是透明的,不可控制的,隱式的。
不談儲存引擎,只討論實現(抽象)

Hash索引

基於雜湊表實現,只有精確匹配索引所有列的查詢才有效,對於每一行資料,儲存引擎都會對所有的索引列計算一個雜湊碼(hash code),並且Hash索引將所有的雜湊碼儲存在索引中,同時在索引表中儲存指向每個資料行的指標。
在這裡插入圖片描述

B-Tree索引(MySQL使用B+Tree)

​ B-Tree能加快資料的訪問速度,因為儲存引擎不再需要進行全表掃描來獲取資料,資料分佈在各個節點之中。
在這裡插入圖片描述

B+Tree索引

​ 是B-Tree的改進版本,同時也是資料庫索引索引所採用的儲存結構。資料都在葉子節點上,並且增加了順序訪問指標,每個葉子節點都指向相鄰的葉子節點的地址。相比B-Tree來說,進行範圍查詢時只需要查詢兩個節點,進行遍歷即可。而B-Tree需要獲取所有節點,相比之下B+Tree效率更高。
在這裡插入圖片描述

參看地址:https://www.cnblogs.com/liqiangchn/p/9060521.html