Mysql 中 MyISAM 和 InnoDB 的區別有哪些?

大家好!我是程式猿杯微傑,搬磚快樂!

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 的重要原因之一;

Mysql 中 MyISAM 和 InnoDB 的區別有哪些?

MyISAM 和 InnoDB 如何選擇:

1。 是否要支援事務,如果要請選擇 InnoDB,如果不需要可以考慮 MyISAM;

2。 如果表中絕大多數都只是讀查詢,可以考慮 MyISAM,如果既有讀寫也挺頻繁,請使用InnoDB;

3。 系統崩潰後,MyISAM恢復起來更困難,不能接受就選 InnoDB;

Mysql 中 MyISAM 和 InnoDB 的區別有哪些?

懂得都懂

用技術交流,一同前行!