MySQL 中 InnoDB 和 MyISAM 區(qū)別
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了漣水免費(fèi)建站歡迎大家使用!
1、事務(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是更好的選擇
2、全文索引
Innodb不支持全文索引,如果一定要用的話,最好使用sphinx等搜索引擎。myisam對(duì)中文支持的不是很好
不過新版本的Innodb已經(jīng)支持了
3、鎖
mysql支持三種鎖定級(jí)別,行級(jí)、頁(yè)級(jí)、表級(jí);
MyISAM支持表級(jí)鎖定,提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)
InnoDB支持行級(jí)鎖,InnoDB表的行鎖也不是絕對(duì)的,如果在執(zhí)行一個(gè)SQL語(yǔ)句時(shí)MySQL不能確定要掃描的范圍,InnoDB表同樣會(huì)鎖全表,注意間隙鎖的影響
例如update table set num=1 where name like “%aaa%”
4、存儲(chǔ)
MyISAM在磁盤上存儲(chǔ)成三個(gè)文件。第一個(gè)文件的名字以表的名字開始,擴(kuò)展名指出文件類型, .frm文件存儲(chǔ)表定義,數(shù)據(jù)文件的擴(kuò)展名為.MYD, 索引文件的擴(kuò)展名是.MYI
InnoDB,基于磁盤的資源是InnoDB表空間數(shù)據(jù)文件和它的日志文件,InnoDB 表的大小只受限于操作系統(tǒng)文件的大小
注意:MyISAM表是保存成文件的形式,在跨平臺(tái)的數(shù)據(jù)轉(zhuǎn)移中使用MyISAM存儲(chǔ)會(huì)省去不少的麻煩
5、索引
InnoDB(索引組織表)使用的聚簇索引、索引就是數(shù)據(jù),順序存儲(chǔ),因此能緩存索引,也能緩存數(shù)據(jù)
MyISAM(堆組織表)使用的是非聚簇索引、索引和文件分開,隨機(jī)存儲(chǔ),只能緩存索引
6、并發(fā)
MyISAM讀寫互相阻塞:不僅會(huì)在寫入的時(shí)候阻塞讀取,MyISAM還會(huì)在讀取的時(shí)候阻塞寫入,但讀本身并不會(huì)阻塞另外的讀
InnoDB 讀寫阻塞與事務(wù)隔離級(jí)別相關(guān)
以上就是MySQL 中 InnoDB 和 MyISAM 區(qū)別的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注創(chuàng)新互聯(lián)其它相關(guān)文章!