close

簡單來說 這二種SE (storage engine) 的差異

 

MyISAM 和 InnoDB 的一個主要的差別, 就是MyISAM使用Table Locking, InnoDB則是Row Locking, 所以, 如果使用者需要同時大量的Insert+Delete的話, InnoDB絕對是佔上風.

InnoDB支援Transaction+Rollback, 並有Journalling系統, 在當機時, 只要做Journal Replay即可恢復資料.

 

MyISAM是比較普通常用的SE(Storage Engine, 接下來簡稱SE), 與其他SE一樣都忽略了FK的限制, 屬於non-transactional safe的SE.

至於InnoDB, 則實做了FK的限制, 包含on update, on delete等restriction. 因此, 建立/設計資料庫的時候, InnoDB是屬於最嚴謹的SE, 任何違反資料庫原則的設計都會導致錯誤. 因此, InnoDB是唯一被列入Transactional Safe的SE.

此外, 像是我們平常備份資料庫, 若沒有採用InnoDB, 大可直接備份MySQL資料夾底下的data, c/p就可以帶去另外一台MySQL, 但是InnoDB的SE, 就必須透過phpMyAdmin以類似dump的方式(mysqldump)來輸出資料庫的table and data.

 

myISAM的速度絕對比innoDB快很多 , 但是這是在檔案不大,資料不多的情況下
如果DB已經成長到10幾GB,或是某table裡有幾百萬筆資料, 這時就不是加index,或是調參數可以結決的了

如果可以的話 , 把myISAM轉成innoDB吧

arrow
arrow
    全站熱搜

    mool 發表在 痞客邦 留言(1) 人氣()