1. 程式人生 > >InnoDB與Myisam的區別

InnoDB與Myisam的區別

選擇 映射 myisam 出現 壓縮 select 並發控制 spa 支持

如何選擇存儲引擎:

如果不在乎可擴展能力和並發能力,也不在乎崩潰後數據的所示問題,卻對innoDB的空間占用過多比較敏感,這種場合應該使用MyISAM。否則應該使用InnoDB。如果需要使用在線熱備份,需要使用事務的訂單類業務,最好使用InnoDB。

1.構成

MyISAM:每個MyISAM在磁盤上存儲成三個文件,文件的名字以表的名字開始,擴展名指出文件類型。

.frm表定義文件 .myd數據文件 .myi 索引文件 InnoDB包括數據文件和它的日誌文件,表大小只受限於操作系統文件的大小,一般為 2GB。 錯誤日誌:記錄出錯信息,也記錄一些警告信息或者正確的信息。 查詢日誌:記錄所有對數據庫請求的信息,不論這些請求是否得到了正確的執行。 慢查詢日誌:設置一個閾值,將運行時間超過該值的所有SQL語句都記錄到慢查詢的日誌文件中。 二進制日誌:記錄對數據庫執行更改的所有操作。 2.事務處理上
MyISAM:為了強調性能,不提供事務支持; InnoDB供事務支持事務,外部鍵等功能 3.SELECT UPDATE,INSERT,Delete操 作 MyISAM:如果執行大量的SELECT,MyISAM是更好的選擇。因為 a.MyISAM的索引和數據是分開的,並且索引是有壓縮的,內存使用率就對應提高了不少。能加載更多索引。而Innodb是索引和數據是緊密捆綁的,沒有使用壓縮從而會造成Innodb比MyISAM體積龐大不小 b.數據塊,INNODB要緩存,MYISAM只緩存索引塊, 這中間還有換進換出的減少;
c.innodb尋址要映射到塊,再到行,MYISAM記錄的直接是文件的OFFSET,定位比INNODB要快
d.innodb還需要維護MVCC一致;雖然你的場景沒有,但他還是需要去檢查和維護MVCC (Multi-Version Concurrency Control)多版本並發控制
4.對AUTO_INCREMENT的 操作 MyISAM:為INSERT和UPDATE操作自動更新這一列,更好和更快。可以和其他字段一起建立聯合索引 InnoDB必須包含只有該字段的索引,它被用在為該列賦新值。 5.表 的具體行數 MyISAM:select count(*) from table 只要簡單的讀出保存好的行數 InnoDBselect count(*) from table 掃描一遍整個表來計算有多少行 註意:當count(*)語句包含 where條件時,兩種引擎的操作是一樣的 6.鎖 MyISAM:不支持行級鎖,只支持表鎖 InnoDB提供行鎖
但是如果在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表。默認事務隔離級別是repeatable read,通過間隙鎖(next-key locking)避免幻讀的出現。 7.數據恢復 MyISAM:恢復時間較長 InnoDB利用事務日誌進行數據恢復,這會比較快

InnoDB與Myisam的區別