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*/
}
加鎖邏輯:加鎖-唯一索引的沖突檢查-判斷Gap鎖或Next-Key鎖-加X鎖
面試側重點
- 基本的查詢語法
- 索引
- 鎖
- 存盤結構建議在索引的時候自己帶出來點,給自己創造一些亮點
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/286266.html
標籤:其他
上一篇:【論文閱讀】Modeling Multi-turn Conversation with Deep Utterance Aggregation
下一篇:Spark學習筆記--環境搭建
