InnoDB 采用了MVCC來支持高並發,並且實現了四個標准的隔離級別。其默認級別是REPEATABLE READ(可重復讀) ,並且,通過間隙鎖(next-key locking)策略防止幻讀的出現。間隙鎖使得InnoDB 不僅僅鎖定查詢涉及的行,還會對索引中的間隙進行鎖定,防止幻影行的插入。
InnoDB 是基於聚簇索引建立的。InnoDB的索引結構和mysql的其他存儲引擎有很大的不同,聚簇索引對主鍵查詢有很高的性能。不過它的二級索引(second index,非主鍵索引)中必須包含主鍵列,所以如果主鍵列很大的話,其他的所有索引都會很大。因此,若表上的索引較多的話,主鍵應該盡可能的小。INNODB 的存儲格式是平台獨立的,也就是說可以將數據和索引文件從intel平台復制到power pc或者sun sparc平台。
InnoDB 內部做了很多優化,包括從磁盤讀取數據時采用的可預測性預讀,能夠自動在內存中創建hash索引以加速讀操作的自適應哈希索引(adaptive hash index),以及能夠加速插入操作的插入緩沖區(insert buffer)等。
InnoDB 的行為是非常復雜的,不容易理解。如果使用了InnoDB,筆者強烈建議閱讀官方手冊中的“InnoDB事務模型和鎖” 一節。如果應用程序基於InnoDB構建,則事先了解一下InnoDB的MVCC架構帶來的一些微妙和細節之處是非常有必要的。存儲引擎要為所有用戶甚至包括修改數據行為的用戶維持一致性的視圖,是非常復雜的工作。
作為事務型的存儲引擎,InnoDB 通過一些機制和工具支持真正的熱備份。Mysql的其他存儲引擎不支持熱備份,要獲取一致性視圖需要停止對所有表的寫入,而在讀寫混合場景中,停止寫入可能也意味著停止讀取。