MySQL 中 InnoDB 和 MyISAM 區別

MySQL 中 InnoDB 和 MyISAM 區別

mysql 中 InnoDB 和 MyISAM 區別

1、事務和外鍵

InnoDB具有事務,支持4個事務隔離級別,回滾,崩潰修復能力和多版本并發的事務安全,包括ACID。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多用戶并發操作的性能

MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。如果應用中需要執行大量的SELECT查詢,那么MyISAM是更好的選擇

2、全文索引

Innodb不支持全文索引,如果一定要用的話,最好使用sphinx等搜索引擎。myisam對中文支持的不是很好

不過新版本的Innodb已經支持了

3、鎖

mysql支持三種鎖定級別,行級、頁級、表級;

MyISAM支持表級鎖定,提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)

InnoDB支持行級鎖,InnoDB表的行鎖也不是絕對的,如果在執行一個SQL語句時MySQL不能確定要掃描的范圍,InnoDB表同樣會鎖全表,注意間隙鎖的影響

例如update table set num=1 where name like “%aaa%”

4、存儲

MyISAM在磁盤上存儲成三個文件。第一個文件的名字以表的名字開始,擴展名指出文件類型, .frm文件存儲表定義,數據文件的擴展名為.MYD,? 索引文件的擴展名是.MYI

InnoDB,基于磁盤的資源是InnoDB表空間數據文件和它的日志文件,InnoDB 表的大小只受限于操作系統文件的大小

注意:MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去不少的麻煩

5、索引

InnoDB(索引組織表)使用的聚簇索引、索引就是數據,順序存儲,因此能緩存索引,也能緩存數據

MyISAM(堆組織表)使用的是非聚簇索引、索引和文件分開,隨機存儲,只能緩存索引

6、并發

MyISAM讀寫互相阻塞:不僅會在寫入的時候阻塞讀取,MyISAM還會在讀取的時候阻塞寫入,但讀本身并不會阻塞另外的讀

InnoDB 讀寫阻塞與事務隔離級別相關

推薦教程:《PHP教程》《PHP教程

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享