MyISAM和InnoDB的對比

Mysql 數據庫中,最常用的兩種引擎是 innordb 和 myisam。InnoDB 是 Mysql 的默
認存儲引擎。

  1. 事務處理上方面
    MyISAM 強調的是性能,查詢的速度比 InnoDB 類型更快,但是不提供事務支持。
    InnoDB 提供事務支持事務。

  2. 外鍵
    MyISAM 不支持外鍵,InnoDB 支持外鍵。


  3. MyISAM 只支持表級鎖,InnoDB 支持行級鎖和表級鎖,默認是行級鎖,行鎖大幅度提高了多用戶并發操作的性能。innodb 比較適合于插入和更新操作比較多的情況,而 myisam 則適合用于頻繁查詢的情況。另外,InnoDB 表的行鎖也不是絕對的,如果在執行一個 SQL 語句時,MySQL 不能確定要掃描的范圍,InnoDB 表同樣會鎖全表,例如 update table set num=1 where name like “%aaa%”。

  4. 全文索引
    MyISAM 支持全文索引, InnoDB 不支持全文索引。innodb 從 mysql5.6 版本開始提供對全文索引的支持。

  5. 表主鍵
    MyISAM:允許沒有主鍵的表存在。
    InnoDB:如果沒有設定主鍵,就會自動生成一個 6 字節的主鍵(用戶不可見)。

  6. 表的具體行數
    MyISAM:select count() from table,MyISAM 只要簡單的讀出保存好的行數。因為
    MyISAM 內置了一個計數器,count(
    )時它直接從計數器中讀。
    InnoDB:不保存表的具體行數,也就是說,執行 select count(*) from table 時,InnoDB要掃描一遍整個表來計算有多少行。

一張表,里面有 ID 自增主鍵,當 insert 了 17 條記錄之后,刪除了第 15,16,17 條記錄,再把 Mysql 重啟,再 insert 一條記錄,這條記錄的 ID 是 18 還是 15 ?

如果表的類型是 MyISAM, 那么是 18。因為 MyISAM 表會把自增主鍵的最大 ID 記錄到數據文件里, 重啟MySQL 自增主鍵的最大 ID 也不會丟失。

如果表的類型是 InnoDB, 那么是 15。InnoDB 表只是把自增主鍵的最大 ID 記錄到內存中, 所以重啟數據庫會導致最大 ID 丟失

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容