Mysql 的默認(rèn)索引引擎(表級(jí)別設(shè)置)為InnoDB撰筷,而MyISAM則需要指定設(shè)置
現(xiàn)在基本上都是使用InnoDB作為Mysql的索引引擎
1:存儲(chǔ)
InnoDB(索引組織表)索引就是數(shù)據(jù),順序存儲(chǔ)畦徘,因此能緩存索引毕籽,也能緩存數(shù)據(jù)
MyISAM(堆組織表)索引和文件分開,隨機(jī)存儲(chǔ)井辆,只能緩存索引
2:事務(wù)
InnoDB具有事務(wù)关筒,支持4個(gè)事務(wù)隔離級(jí)別,回滾杯缺,崩潰修復(fù)能力和多版本并發(fā)的事務(wù)安全蒸播,包括ACID。
如果應(yīng)用中需要執(zhí)行大量的INSERT或UPDATE操作萍肆,則應(yīng)該使用InnoDB袍榆,這樣可以提高多用戶并發(fā)操作的性能
MyISAM管理非事務(wù)表。它提供高速存儲(chǔ)和檢索塘揣,以及全文搜索能力蜡塌。
如果應(yīng)用中需要執(zhí)行大量的SELECT查詢,那么MyISAM是更好的選擇
3:并發(fā)
InnoDB 讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)
MyISAM讀寫互相阻塞:不僅會(huì)在寫入的時(shí)候阻塞讀取勿负,MyISAM還會(huì)在讀取的時(shí)候阻塞寫入,但讀本身并不會(huì)阻塞另外的讀
4:鎖級(jí)別
mysql支持三種鎖定級(jí)別劳曹,行級(jí)奴愉、頁級(jí)、表級(jí);
InnoDB支持行級(jí)鎖铁孵,InnoDB表的行鎖也不是絕對的锭硼,如果在執(zhí)行一個(gè)SQL語句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表蜕劝,注意間隙鎖的影響
InnoDB同樣的支持表級(jí)鎖
MyISAM僅支持表級(jí)鎖定