首頁 > 軟體

MySQL儲存引擎InnoDB與Myisam的區別分析

2022-12-29 14:01:46

MySQL有多種儲存引擎:MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。比較常用的是 MyISAM 和 InnoBD。在MySQL 5.1之前的版本中,預設的搜尋引擎是MyISAM,從MySQL 5.5之後的版本中,預設的搜尋引擎變更為InnoDB。

兩者的優劣可謂是各有千秋。INNODB會支援一些關聯式資料庫的高階功能,如事務功能和行級鎖,MYISAM不支援。MYISAM的效能更優,佔用的儲存空間少。所以,選擇何種儲存引擎,視具體應用而定。

MyISAM介紹

每個MyISAM在磁碟上儲存成三個檔案。第一個檔案的名字以表的名字開始,擴充套件名指出檔案型別。.frm檔案儲存表定義。資料檔案的擴充套件名為.MYD (MYData)。

MyISAM表格可以被壓縮,而且它們支援全文搜尋。不支援事務,而且也不支援外來鍵。如果事物回滾將造成不完全回滾,不具有原子性。在進行updata時進行表鎖,並行量相對較小。如果執行大量的SELECT,MyISAM是更好的選擇。

MyISAM快取在記憶體的是索引,不是資料。而InnoDB快取在記憶體的是資料,相對來說,伺服器記憶體越大,InnoDB發揮的優勢越大。

優點:查詢資料相對較快,適合大量的select,可以全文索引。

缺點:不支援事務,不支援外來鍵,並行量較小,不適合大量update

InnoDB介紹

這種型別是事務安全的。.它與BDB型別具有相同的特性,它們還支援外來鍵。InnoDB表格速度很快。具有比BDB還豐富的特性,因此如果需要一個事務安全的儲存引擎,建議使用它。在update時表進行行鎖,並行量相對較大。如果你的資料執行大量的INSERT或UPDATE,出於效能方面的考慮,應該使用InnoDB表。

優點:支援事務,支援外來鍵,並行量較大,適合大量update

缺點:查詢資料相對較快,不適合大量的select

MySQL 儲存引擎 MyISAM 與 InnoDB 如何選擇?

下面我們分別來看兩種儲存引擎的區別。

  • 一、InnoDB支援事務,MyISAM不支援,這一點是非常之重要。事務是一種高階的處理方式,如在一些列增刪改中只要哪個出錯還可以回滾還原,而MyISAM就不可以了。
  • 二、MyISAM適合查詢以及插入為主的應用,InnoDB適合頻繁修改以及涉及到安全性較高的應用
  • 三、InnoDB支援外來鍵,MyISAM不支援
  • 四、MySQL 在 5.1 之前版本預設儲存引擎是 MyISAM,5.1 之後版本預設儲存引擎是 InnoDB
  • 五、InnoDB不支援FULLTEXT型別的索引
  • 六、InnoDB中不儲存表的行數,如select count(*) from table時,InnoDB需要掃描一遍整個表來計算有多少行,但是MyISAM只要簡單的讀出儲存好的行數即可。注意的是,當count(*)語句包含where條件時MyISAM也需要掃描整個表
  • 七、對於自增長的欄位,InnoDB中必須包含只有該欄位的索引,但是在MyISAM表中可以和其他欄位一起建立聯合索引
  • 八、清空整個表時,InnoDB是一行一行的刪除,效率非常慢。MyISAM則會重建表
  • 九、InnoDB支援行鎖(某些情況下還是鎖整表,如 update table set a=1 where user like '%lee%'

通過以上九點區別,結合個人部落格的特點,推薦個人部落格系統使用MyISAM,因為在部落格里主要操作是讀取和寫入,很少有鏈式操作。所以選擇MyISAM引擎使你部落格開啟也頁面的效率要高於InnoDB引擎的部落格,當然只是個人的建議,大多數部落格還是根據實際情況下謹慎選擇。

總結

如果你的應用程式一定要使用事務,毫無疑問你要選擇INNODB引擎。但要注意,INNODB的行級鎖是有條件的。在where條件沒有使用主鍵時,照樣會鎖全表。比如DELETE FROM mytable這樣的刪除語句。

如果你的應用程式對查詢效能要求較高,就要使用MYISAM了。MYISAM索引和資料是分開的,而且其索引是壓縮的,可以更好地利用記憶體。所以它的查詢效能明顯優於INNODB。壓縮後的索引也能節約一些磁碟空間。MYISAM擁有全文索引的功能,這可以極大地優化LIKE查詢的效率。

有人說MYISAM只能用於小型應用,其實這只是一種偏見。如果資料量比較大,這是需要通過升級架構來解決,比如分表分庫,而不是單純地依賴儲存引擎。

現在一般都是選用innodb了,主要是myisam的全表鎖,讀寫序列問題,並行效率鎖表,效率低myisam對於讀寫密集型應用一般是不會去選用的。只用恰當的針對業務型別來選擇合適的表型別,才能最大的發揮MySQL的效能優勢。

到此這篇關於MySQL儲存引擎InnoDB與Myisam的優缺點的文章就介紹到這了,更多相關InnoDB與Myisam的優缺點內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com