大家好!我是程式猿杯微傑,搬磚快樂!
MyISAM 和 InnoDB 的區別有哪些?
1。 InnoDB 支援事務,MyISAM 不支援事務。這是 MySQL 將預設儲存引擎從 MyISAM 變成 InnoDB 重要原因之一(5。5版本開始Innodb已經成為Mysql的預設引擎);
2。 InnoDB 支援外來鍵,而 MyISAM 不支援。對一個包含外來鍵的 InnoDB 錶轉為 MYISAM 會失敗;
3。 InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的檔案存放在主鍵索引的葉子節點上,因此 InnoDB 必須要有主鍵,透過主鍵索引效率很高。而 MyISAM 是非聚集索引,資料檔案是分離的,索引儲存的是資料檔案的指標;
4。 InnoDB 不儲存表的具體行數,執行 select count(*) from table 時需要全表掃描。而MyISAM 用一個變數儲存了整個表的行數,執行上述語句時只需要讀出該變數即可,速度很快;
5。 InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖。一個更新語句會鎖住整張表,導致其他查詢和更新都會被阻塞,因此併發訪問受限。這也是 MySQL 將預設儲存引擎從 MyISAM 變成 InnoDB 的重要原因之一;
MyISAM 和 InnoDB 如何選擇:
1。 是否要支援事務,如果要請選擇 InnoDB,如果不需要可以考慮 MyISAM;
2。 如果表中絕大多數都只是讀查詢,可以考慮 MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB;
3。 系統崩潰後,MyISAM恢復起來更困難,不能接受就選 InnoDB;
懂得都懂
用技術交流,一同前行!