【MYSQL】純干貨!面試題:InnoDB!完全解析!建議收藏!
InnoDB 架構
下圖是官方文檔給出的InnoDB存儲結構
InnoDB的日志先行策略,按照內存到磁盤的順序對數據進行處理。
其中的優點有以下幾點
內存中操作完成就可以返回成功,執行效率高
就算是數據落回磁盤過程中斷電也能通過redo日志找回
InnoDB的緩存池通過頁鏈表實現,效率高
InnoDB的磁盤中的存儲有以下特點,我做了簡化直接突出重點,方便大家記憶
InnoDB表的限制:一個表的輔助索引最多64個,一行大小最多65535,組合索引最多16個字段
表空間
系統表空間
File-Per-Table 表空間
Undo表空間
臨時表空間
索引
InnoDB中通過索引組織表存放索引。
InnoDB中主鍵索引使用的是B+索引
B+樹的特點
每個非葉子節點只存儲鍵值,不存儲數據
一般的高度為2-4層,所以查找速度很快
輔助索引有被稱為非聚集索引,輔助索引存儲的是主鍵的值,當拿到主鍵的值之后再去查找數據的過程被稱為回表。
如果人家問你回表,可以按照回表-輔助索引-索引的邏輯解釋。
覆蓋索引指的是輔助索引能找到要找的列,而不需要回表。
聯合索引的順序很重要,所以我們在創建索引的過程中需要注意列的順序。
事務
ACID
原子性:Atomicity
一致性:Consistency
隔離性:Isolation
持久性:Durability
事務隔離級別有4種,InnoDB默認支持REPEATABLE READ。
InnoDB通過redo日志實現事務,redo日志是存儲在磁盤的物理操作日志。
binlog是維護日志一致性在內存里的邏輯日志。
臟讀是指一個事務提交之前,另一個事務來讀取數據造成的數據不一致。
幻讀問題就是一個事務中同一個SQL多次執行,結果集不同。
鎖
Innodb支持行級鎖。
行級鎖分為共享鎖和排他鎖。
共享鎖(S鎖),只可以讀,不可以修改
排它鎖(X鎖),不可讀也不可寫
意向鎖(Intention Locks)
意向共享鎖(IS),加行共享鎖之前需要得到的鎖
意向排他鎖(IX),加行排他鎖之前需要得到鎖
行鎖的存儲結構
typedef struct lock_rec_struct lock_rec_t struct lock_rec_struct{ ulint space; /*space id*/ ulint page_no; /*page number*/ unint n_bits; /*number of bits in the lock bitmap*/ }
1
2
3
4
5
6
加鎖邏輯:加鎖-唯一索引的沖突檢查-判斷Gap鎖或Next-Key鎖-加X鎖
面試側重點
基本的查詢語法
索引
鎖
存儲結構建議在索引的時候自己帶出來點,給自己創造一些亮點
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。