MyISAM是MySQL的默認資料庫引擎(5.5版之前),
雖然性能極佳,而且提供了大量的特性,包括全文索引、壓縮、空間函式等,但MyISAM不支持事務和行級鎖,而且最大的缺陷就是崩潰后無法安全恢復,
不過,5.5版本之后,MySQL引入了InnoDB(事務性資料庫引擎),MySQL 5.5版本后默認的存盤引擎為 InnoDB,
- InnoDB 支持事務,MyISAM 不支持事務,這是 MySQL 將默認存盤引擎從 MyISAM 變成 InnoDB 的重要原因之一;
- InnoDB 支持外鍵,而 MyISAM 不支持,對一個包含外鍵的 InnoDB 表轉為 MYISAM 會失敗;
- InnoDB 是聚集索引,MyISAM 是非聚集索引,聚簇索引的檔案存放在主鍵索引的葉子節點上,因此 InnoDB 必須要有主鍵,通過主鍵索引效率很高,但是輔助索引需要兩次查詢,先查詢到主鍵,然后再通過主鍵查詢到資料,因此,主鍵不應該過大,因為主鍵太大,其他索引也都會很大,而 MyISAM 是非聚集索引,資料檔案是分離的,索引保存的是資料檔案的指標,主鍵索引和輔助索引是獨立的,
- InnoDB 不保存表的具體行數,執行 select count(*) from table 時需要全表掃描,而MyISAM 用一個變數保存了整個表的行數,執行上述陳述句時只需要讀出該變數即可,速度很快;
- InnoDB 最小的鎖粒度是行鎖,MyISAM 最小的鎖粒度是表鎖,一個更新陳述句會鎖住整張表,導致其他查詢和更新都會被阻塞,因此并發訪問受限,這也是 MySQL 將默認存盤引擎從 MyISAM 變成 InnoDB 的重要原因之一;
參考:https://www.zhihu.com/question/20596402
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/262988.html
標籤:其他
下一篇:sql查詢求教
