【MySQL面試題】爲什麼使用B+樹作爲索引?

問:你的系統使用了什麼數據庫?

答:是使用的MySQL數據庫。

問:你瞭解過MySQL索引嗎?有哪些呢?

答:MySQL常用的有innodb和myisam索引。

問:那innodb底層採用的是什麼結構呢?

答:它底層採用的是b+樹的結構,內部也支持hash的結構。

好了,面試官引導的差不多了,接下去就要好好回答了。
問:那爲什麼不是b樹或者其他的樹結構呢?

答:b+樹是一個多叉的平衡樹,平衡樹就是每個節點的葉子節點高度差不超過1,並且在它的非葉子節點存儲的是索引,數據全都存儲在葉子節點中,用一個鏈表串聯起來,遍歷時只需遍歷該鏈表。

問:那爲什麼是多叉並且是平衡呢?

答:多叉且平衡可以使樹的高度降低,降低查詢時IO的次數。並且索引存在着一定的順序,支持範圍的比較查詢。

問:那麼一般數據庫表會有多個索引,查詢隨便一個非主鍵索引時是如何查詢的呢?

答:在數據庫中,存在主鍵(聚集)索引和普通索引。如果沒有指定默認會生成一個聚集索引,在查詢非聚集索引時,該索引數據結構的底層存儲的是主鍵的值,因此會根據查詢到的主鍵再做一次回表查詢 在使用explain關鍵字時會出現 using index condition。

問:那麼如何避免回表查詢呢?

答:我們可以利用索引覆蓋的原理,在出了主鍵索引外,對要查詢的其他字段添加普通索引即可。

避免回表優化參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章