InnoDB知識點整理

1.InnoDB支持事務,外鍵,行級鎖,索引和數據存到一起,不保存表的具體行數,count時需要全表掃描,此時會鎖表,刪除數據的時候一條一條的刪除,即使是刪除表中所有的數據,不支持全文索引。

2.InnoDB在select和insert性能上不如myisam

3.InnoDB除了存自定義的列之外,還存了一個事務id和回滾指針列,如果表中沒有主鍵,並且也沒有not null 的unique,那麼Innodb會增加一個rowid列作爲主鍵(6個字節)

4.InnoDB的數據是按行進行存放,主鍵索引(聚集索引)是一個B+Tree,基於聚集索引的特點,InnoDB的主鍵索引的葉子節點保存了整行數據,非葉子節點保存了主鍵,輔助索引的葉子節點中保存的是主鍵,如果通過輔助索引檢索數據,是先通過輔助索引找到主鍵,然後再查主鍵索引,找到數據。

5.InnoDB的鎖級別是行鎖,注意,InnoDB的行鎖是通過給索引項加鎖來實現的,InnoDB行鎖分爲3中形式,簡單瞭解,一種是給索引項加鎖,一種是對索引項的間隙,進行加鎖,第三種就是對記錄和前面的間隙進行加鎖。

     因爲InnoDB的行鎖是通過索引項來實現的,所以,如果不通過索引檢索數據,那麼Innodb將對錶中所有的記錄進行加鎖,也就是表鎖。(1)不通過索引條件查詢的時候,會鎖定表中的所有記錄(2)如果索引的值相同,那麼會鎖定兩行數據,例如id是索引,存在這樣的數據{id:1, name:1} {id:1, name:4} 如果查詢條件是id=1 and name=4  那麼會鎖定id=1的所有記錄,從而會出現鎖衝突的現象。(3)當表中由多個索引的時候,不同事務使用不同的索引,不論是什麼索引,都會使用行鎖對數據進行加鎖。(4)即便是查詢條件中有索引字段,但是如果執行計劃沒有使用這個索引,還是沒用,所以分析鎖衝突的時候別忘記了執行計劃。


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