MySql索引常見問題,B 樹詳解

2021-10-05 01:40:25 字數 2552 閱讀 2998

什麼是索引?

索引是一種能幫助 mysql 提高查詢效率的資料結構。

索引分別有哪些優點和缺點?

索引的優點如下:

索引的缺點:

使用索引注意事項:

索引有幾種型別?分別如何建立?

mysql 的索引有兩種分類方式:邏輯分類和物理分類。 按照邏輯分類,索引可分為:

按照物理分類,索引可分為:

各種索引的建立指令碼如下:

-- 建立主鍵索引

alter

table t add

primary

keyadd

(`id`);

-- 建立唯一索引

alter

table t add

unique

(`username`);

-- 建立普通索引

alter

table t add

index index_name (

`username`);

-- 建立全文索引

alter

table t add fulltext (

`username`

);

主索引和唯一索引有什麼區別?

什麼叫回表查詢?

普通索引查詢到主鍵索引後,回到主鍵索引樹搜尋的過程,我們稱為回表查詢。

mysql>

create

table t(

id int

primary

key,

k int

notnull

, name varchar(16

),index

(k))

engine

=innodb

;

如果語句是 select * from t where id=500,即主鍵查詢方式,則只需要檢索主鍵 id 字段。

mysql>

select

*from t where id=

500;

+-----+---+-------+

| id | k | name |

+-----+---+-------+

|500|5

| name5 |

+-----+---+-------+

如果語句是 select * from t where k=5,即普通索引查詢方式,則需要先搜尋 k 索引樹,得到 id 的值為 500,再到 id 索引樹搜尋一次,這個過程稱為回表查詢。

mysql>

select

*from t where k=5;

+-----+---+-------+

| id | k | name |

+-----+---+-------+

|500|5

| name5 |

+-----+---+-------+

也就是說,基於非主鍵索引的查詢需要多掃瞄一棵索引樹。因此,我們在應用中應該盡量使用主鍵查詢。

索引的常見儲存演算法有哪些?

innodb 為什麼要使用 b+ 樹,而不是 b 樹、hash、紅黑樹或二叉樹?

因為 b 樹、hash、紅黑樹或二叉樹存在以下問題:

為什麼 innodb 要使用 b+ 樹來儲存索引?

b+tree 中的 b 是 balance,是平衡的意思,它在經典 b tree 的基礎上進行了優化,增加了順序訪問指標,在b+tree 的每個葉子節點增加乙個指向相鄰葉子節點的指標,就形成了帶有順序訪問指標的 b+tree,這樣就提高了區間訪問效能:如果要查詢 key 為從 18 到 49 的所有資料記錄,當找到 18 後,只需順著節點和指標順序遍歷就可以一次性訪問到所有資料節點,極大提到了區間查詢效率(無需返回上層父節點重複遍歷查詢減少 io 操作)。

索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存的磁碟上,這樣的話,索引查詢過程中就要產生磁碟 io 消耗,相對於記憶體訪問,io 訪問的消耗要高幾個數量級,所以索引的結構組織要盡量減少查詢過程中磁碟 io 的訪問次數,從而提公升索引效率。 綜合所述,inndb 只有採取 b+ 樹的資料結構儲存索引,才能提供資料庫整體的操作效能。

b+樹的特徵:

1.有k個子樹的中間節點包含有k個元素(b樹中是k-1個元素),每個元素不儲存資料,只用來索引,所有資料都儲存在葉子節點。

2.所有的葉子結點中包含了全部元素的資訊,及指向含這些元素記錄的指標,且葉子結點本身依關鍵字的大小自小而大順序鏈結。

3.所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。

b+樹的優勢:

1.單一節點儲存更多的元素,使得查詢的io次數更少。

2.所有查詢都要查詢到葉子節點,查詢效能穩定。

3.所有葉子節點形成有序鍊錶,便於範圍查詢。

所有的中間節點元素都同時存在於子節點,在子節點元素中是最大(或最小)元素。

常見問題 MySQL 索引

最常用,沒有任何限制。必須唯一,但允許空值,如果是組合索引,列值的組合必須唯一。由於mysql查詢時,只能使用乙個索引,因此建立組合索引在組合查詢的場景下更加有效。組合索引是有順序的,建立乙個組合索引,其實相當於建立了所有該索引包含的字首的索引,舉例說明為,建立組合索引 id,time 相當於分別建...

索引常見問題

全表掃瞄 在資料量大的時候,執行效率很慢。資料量小比較快 索引 只要將關鍵資訊組織起來,根據這些資訊的指引,就可以快速查詢到我們想要的頁面,因此通過索引可以大幅度提公升我們查詢的速度。二 什麼樣的資訊能成為索引 主鍵唯一鍵 普通鍵都可以 三 索引的資料結構 二叉查詢樹 b tree b tree h...

索引之B樹 B 樹 B 樹 B 樹詳解

索引之b樹 b 樹 b 樹 b 樹 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則...