問:你的系統使用了什麼數據庫?
答:是使用的MySQL數據庫。
問:你瞭解過MySQL索引嗎?有哪些呢?
答:MySQL常用的有innodb和myisam索引。
問:那innodb底層採用的是什麼結構呢?
答:它底層採用的是b+樹的結構,內部也支持hash的結構。
好了,面試官引導的差不多了,接下去就要好好回答了。
問:那爲什麼不是b樹或者其他的樹結構呢?
答:b+樹是一個多叉的平衡樹,平衡樹就是每個節點的葉子節點高度差不超過1,並且在它的非葉子節點存儲的是索引,數據全都存儲在葉子節點中,用一個鏈表串聯起來,遍歷時只需遍歷該鏈表。
問:那爲什麼是多叉並且是平衡呢?
答:多叉且平衡可以使樹的高度降低,降低查詢時IO的次數。並且索引存在着一定的順序,支持範圍的比較查詢。
問:那麼一般數據庫表會有多個索引,查詢隨便一個非主鍵索引時是如何查詢的呢?
答:在數據庫中,存在主鍵(聚集)索引和普通索引。如果沒有指定默認會生成一個聚集索引,在查詢非聚集索引時,該索引數據結構的底層存儲的是主鍵的值,因此會根據查詢到的主鍵再做一次回表查詢 在使用explain關鍵字時會出現 using index condition。
問:那麼如何避免回表查詢呢?
答:我們可以利用索引覆蓋的原理,在出了主鍵索引外,對要查詢的其他字段添加普通索引即可。