mysql 的 存儲結構(儲存引擎)


 1 MyISAM:這種引擎是mysql最早提供的。這種引擎又可以分為靜態MyISAM、動態MyISAM 和壓縮MyISAM三種:
    靜態MyISAM如果數據表中的各數據列的長度都是預先固定好的,服務器將自動選擇這種表類型。因為數據表中每一條記錄所占用的空間都是一樣的,所以這種表存取和更新的效率非常高。當數據受損時,恢復工作也比較容易做。
    動態MyISAM如果數據表中出現varchar、xxxtext或xxxBLOB字段時,服務器將自動選擇這種表類型。相對於靜態MyISAM,這種表存儲空間比較小,但由於每條記錄的長度不一,所以多次修改數據后,數據表中的數據就可能離散的存儲在內存中,進而導致執行效率下降。同時,內存中也可能會出現很多碎片。因此,這種類型的表要經常用optimize table 命令或優化工具來進行碎片整理。
    壓縮MyISAM以上說到的兩種類型的表都可以用myisamchk工具壓縮。這種類型的表進一步減小了占用的存儲,但是這種表壓縮之后不能再被修改。另外,因為是壓縮數據,所以這種表在讀取的時候要先時行解壓縮。
    但是,不管是何種MyISAM表,目前它都不支持事務,行級鎖和外鍵約束的功能。
    2 MyISAM Merge引擎:這種類型是MyISAM類型的一種變種。合並表是將幾個相同的MyISAM表合並為一個虛表。常應用於日志和數據倉庫。
    3 InnoDB:InnoDB表類型可以看作是對MyISAM的進一步更新產品,它提供了事務、行級鎖機制和外鍵約束的功能。
    4 memory(heap):這種類型的數據表只存在於內存中。它使用散列索引,所以數據的存取速度非常快。因為是存在於內存中,所以這種類型常應用於臨時表中。
    5 archive:這種類型只支持select 和 insert語句,而且不支持索引。常應用於日志記錄和聚合分析方面。
    當然MySql支持的表類型不止上面幾種。

 

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

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

 

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

 

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還豐富的特性,因此如果需要一個事務安全的存儲引擎,建議使用它.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM