MyISAM和InnoDB
差別:
MyISAM 不支援事物,隻支援表級鎖,不支援外鍵,實體結構(三個檔案),非聚簇索引。
InnoDB 支援事務和行級鎖,支援外鍵,實體結構(兩個檔案),聚簇索引。
如果系統讀多寫少,對原子性要求低,那麼MyISAM最好的選擇。且MyISAM恢複速度快,可直接用備份覆寫恢複。
如果系統讀少寫多的時候,尤其是并發寫入高的時候,InnoDB就是首選了。
因為寫入過程,需要加鎖,MyISAM表級鎖會使寫入性能變差。
檔案結構:
MyISAM
.frm檔案:與表相關的中繼資料資訊都存放在frm檔案,包括表結構的定義資訊等。
.myd檔案:用于存儲myisam表的資料
.myi檔案:用于存儲myisam表的索引相關資訊
InnoDB
.frm檔案:與表相關的中繼資料資訊都存放在frm檔案,包括表結構的定義資訊等。
.ibd檔案和.ibdata檔案:
這兩種檔案都是存放InnoDB資料的檔案,之是以用兩種檔案來存放innodb的資料,是因為innodb的資料存儲方式能夠通過配置來決定是使用共享表空間存放存儲資料,還是用獨享表空間存放存儲資料。
索引類型
非聚簇索引:指b+樹葉節點的資料存放的是記錄的位址,通過這個位址,讀取相對應的資料記錄。
聚簇索引:索引葉子節點中存放的是資料本身,索引也是資料。
總結
從曆史上來說MyISAM曆史更加久遠,是以InnoDB性能也就更好了,在這我們需要考慮當我們修改資料庫中的表的時候,資料庫發生了變化,那麼他們的主鍵的位址也就發生了變化,這樣你的MyISAM的主索引和輔助索引就需要重建立立索引。而InnoDB隻需要改變主索引,因為它的輔助索引是存主鍵的,是以這樣考慮InnoDB更加高效。
現在主流的mysql索引是InnoDB。