myisam 與 innodb的區別

MySQL表存儲結構是MySQL數據庫的重要組成部分,下面就爲您介紹兩種主要MySQL表存儲結構--MyISAM和InnoDB,希望對您能有所幫助。

什麼是MyISAM?

MyISAM是MySQL關係數據庫管理系統的默認儲存引擎。這種MySQL表存儲結構從舊的ISAM代碼擴展出許多有用的功能。在新版本的MySQL中,InnoDB引擎由於其對事務,參照完整性,以及更高的併發性等優點開始廣泛的取代MyISAM。

每一個MyISAM表都對應於硬盤上的三個文件。這三個文件有一樣的文件名,但是有不同的擴展名以指示其類型用途:.frm文件保存表的定義,但是這個文件並不是MyISAM引擎的一部,而是服務器的一部分;.MYD保存表的數據;.MYI是表的索引文件。

什麼是InnoDB?

InnoDB是MySQL的另一個存儲引擎,正成爲目前MySQL AB所發行新版的標準,被包含在所有二進制安裝包裏。較之於其它的存儲引擎它的優點是它支持兼容ACID的事務(類似於PostgreSQL),以及參數完整性(即對外鍵的支持)。

Oracle公司與2005年10月收購了Innobase。Innobase採用雙認證授權。它使用GNU發行,也允許其它想將InnoDB結合到商業軟件的團體獲得授權。

 

目前比較普及的存儲引擎是MyISAM和InnoDB.而MyISAM又是絕大部分Web應用的首選。MyISAM與InnoDB的主要的不同點在於性能和事務控制上。

MyISAM是早期ISAM(Indexed Sequential Access Method,現在用的MySQL5.0已經不支持ISAM了)的擴展實現,ISAM被設計爲適合處理讀頻率遠大於寫頻率這樣一種情況,因此ISAM以及後來的MyISAM都沒有考慮對事物的支持,排除了TPM,不需要事務記錄,ISAM的查詢效率相當可觀,而且內存佔用很少。MyISAM在繼承了這類優點的同時,與時俱進的提供了大量實用的新特性和相關工具。例如考慮到併發控制,提供了表級鎖,雖然MyISAM本身不支持容錯,但可以通過 myisamchk進行故障恢復。而且由於MyISAM是每張表使用各自獨立的存儲文件(MYD數據文件和MYI索引文件),使得備份及恢復十分方便(拷貝覆蓋即可),而且還支持在線恢復。與其他存儲引擎比較,MyISAM具有檢查和修復表格的大多數工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務安全的,而且也不支持外鍵

所以如果你的應用是不需要事務,處理的只是基本的CRUD操作,那麼MyISAM是不二選擇

InnoDB被設計成適用於高併發讀寫的情況.使用MVCC(Multi-Version Concurrency Control)以及行級鎖來提供遵從ACID的事務支持。InnoDB支持外鍵參照完整性,具備故障恢復能力。另外 InnoDB的性能其實還是不錯的,特別是在處理大數據量的情況下,用官方的話說就是: InnoDB的CPU效率是其他基於磁盤的關係數據庫存儲引擎所不能比的。不過InnoDB的備份恢復要麻煩一點,除非你使用了4.1以後版本提供的 Mulit-tablespace支持,因爲InnoDB和MyISAM不同,他的數據文件並不是獨立對應於每張表的。而是使用的共享表空間,簡單的拷貝覆蓋方法對他不適用,必須在停掉MYSQL後對進行數據恢復。使用Per-Table Tablespacesd,使其每張表對應一個獨立的表空間文件,則情況要簡單很多。它與BDB類型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需要一個事務安全的存儲引擎,建議使用它.

一般來說,如果需要事務支持,並且有較高的併發讀寫頻率,InnoDB是不錯的選擇。要是併發讀寫頻率不高的話,其實可以考慮BDB,但由於在MySQL5.1及其以後版本中,將不再提供BDB支持。這個選項也就沒有了

InnoDB 默認情況下的事務是打開的(set autocommit = 0)就是說每插入一條記錄時候,InnoDB類型的表都會把它當作一個單獨的事務來處理.所以如果我們插入了10000條記錄,而且沒有將事務關閉,那麼 InnoDB類型的表會把它當作10000個事務來處理,此時插入的總時間是很多的,這個時候一定要首先把事務關掉再插入,這樣的速度就很快了

至於Heap和BDB(Berkeley DB),相對來說,普及率不如前兩種,但在有些情況下,還是挺適用的

Heap存儲引擎就是將數據存儲在內存中,由於沒有磁盤I./O的等待,速度極快。但由於是內存存儲引擎,所做的任何修改在服務器重啓後都將消失。

Heap挺適合做測試的時候使用

BDB是MySQL第一款事務安全的存儲引擎。在Berkeley DB database library的基礎上建立,同樣是事務安全的,但BDB的普及率顯然不及InnoDB,因爲大多數在MySQL中尋找支持事務的存儲引擎的同時也在找支持MVCC或是行級鎖定存儲引擎,而BDB只支持Page-level Lock。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章