1. 程式人生 > >MySql何時用MyISAM何時用InnoDB(不看後悔,一看必懂)

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引擎索引結構的葉子節點的資料域,存放的並不是實際的資料記錄,而是資料記錄的地址。索引檔案與資料檔案分離,這樣的索引稱為“

非聚簇索引”。其檢索演算法:先按照B+Tree的檢索演算法檢索,找到指定關鍵字,則取出對應資料域的值,作為地址取出資料記錄。

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某一型別(如日誌,調查統計)的業務表。