問:你的系統使用了什麼資料庫?
答:是使用的mysql資料庫。問:你了解過mysql索引嗎?有哪些呢?
答:mysql常用的有innodb和myisam索引。問:那innodb底層採用的是什麼結構呢?
答:它底層採用的是b+樹的結構,內部也支援hash的結構。好了,面試官引導的差不多了,接下去就要好好回答了。
問:那為什麼不是b樹或者其他的樹結構呢?
答:b+樹是乙個多叉的平衡樹,平衡樹就是每個節點的葉子節點高度差不超過1,並且在它的非葉子節點儲存的是索引,資料全都儲存在葉子節點中,用乙個鍊錶串聯起來,遍歷時只需遍歷該鍊錶。問:那為什麼是多叉並且是平衡呢?
答:多叉且平衡可以使樹的高度降低,降低查詢時io的次數。並且索引存在著一定的順序,支援範圍的比較查詢。問:那麼一般資料庫表會有多個索引,查詢隨便乙個非主鍵索引時是如何查詢的呢?
答:在資料庫中,存在主鍵(聚集)索引和普通索引。如果沒有指定缺省會生成乙個聚集索引,在查詢非聚集索引時,該索引資料結構的底層儲存的是主鍵的值,因此會根據查詢到的主鍵再做一次回表查詢 在使用explain關鍵字時會出現 using index condition。問:那麼如何避免回表查詢呢?
答:我們可以利用索引覆蓋的原理,在出了主鍵索引外,對要查詢的其他字段新增普通索引即可。避免回表優化參考鏈結
面試題 為什麼要使用訊息佇列?
其實面試官主要是想看看 為什麼使用訊息佇列?其實就是想知道是因為什麼原因引入的mq技術,為了解決哪些問題。面試官期望的回答就是,當初你們公司有乙個什麼樣的業務場景,這個場景有什麼樣的技術挑戰,不用mq可能會有麻煩,現在引入mq帶來了哪些好處。通過mq的好處是 解耦,非同步,削峰。解耦這個場景通常是發...
面試題 為什麼要分庫分表
為什麼要分表分庫 設計高併發系統的時候,資料庫層面該如何設計 使用過哪些分表分庫中介軟體?不同的分表分庫中介軟體都有什麼優點和缺點?你們是如何對具體的資料庫進行垂直拆分和水平拆分的?其實這一塊內容主要就是針對高併發的,因為分庫分表主要解決的問題就是支撐高並 資料量大兩個問題。而且現在如果是去網際網路...
為什麼MySQL使用B 樹?
首先需要理解磁碟io的原理 硬碟中一般會有多個碟片組成,每個碟片包含兩個面,每個盤面都對應地有乙個讀 寫磁頭。將磁軌劃分為若干個弧段,每個磁軌上乙個弧段被稱之為乙個扇區 圖踐綠色部分 扇區是磁碟的最小組成單元。硬碟通常由重疊的一組碟片構成,每個盤面都被劃分為數目相等的磁軌,並從外緣的 0 開始編號,...