MySql何時用MyISAM何時用InnoDB(不看後悔,一看必懂)
MySql何時用MyISAM何時用InnoDB
MyISAM和InnoDB是MySQL提供的兩種搜尋引擎
MyISAM和InnoDB的區別
①InnoDB支援事務與外來鍵和行級鎖,MyISAM不支援(最主要的差別)
②MyISAM讀效能要優於InnoDB,除了針對索引的update操作,MyISAM的寫效能可能低於InnoDB,其他操作MyISAM的寫效能也是優於InnoDB的,而且可以通過分庫分表來提高MyISAM寫操作的速度
③MyISAM的索引和資料是分開的,而且索引是壓縮的,而InnoDB的索引和資料是緊密捆綁的,沒有使用壓縮,所以InnoDB的體積比MyISAM龐大
MyISAM引擎索引結構的葉子節點的資料域,存放的並不是實際的資料記錄,而是資料記錄的地址。索引檔案與資料檔案分離,這樣的索引稱為“
InnoDB引擎索引結構的葉子節點的資料域,存放的就是實際的資料記錄。這樣的索引被稱為“聚簇索引”,一個表只能有一個聚簇索引。
④InnoDB 中不儲存表的具體行數,也就是說,執行select count(*) from table時,InnoDB要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的。
⑤DELETE FROM table時,InnoDB不會重新建立表,而是一行一行的刪除。
⑥InnoDB表的行鎖也不是絕對的,假如在執行一個SQL語句時MySQL不能確定要掃描的範圍,InnoDB表同樣會鎖全表,例如update table set num=1 where name like “%aaa%”
在where條件沒有主鍵時,InnoDB照樣會鎖全表
選擇哪種搜尋引擎,應視具體應用而定
①如果是讀多寫少的專案,可以考慮使用MyISAM,MYISAM索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於INNODB。壓縮後的索引也能節約一些磁碟空間。MYISAM擁有全文索引的功能,這可以極大地優化LIKE查詢的效率。
②如果你的應用程式一定要使用事務,毫無疑問你要選擇INNODB引擎
③如果是用MyISAM的話,merge引擎可以大大加快應用部門的開發速度,他們只要對這個merge表做一些select count(*)操作,非常適合大專案總量約幾億的rows某一型別(如日誌,調查統計)的業務表。