新聞中心
MySQL表存儲(chǔ)結(jié)構(gòu)是MySQL數(shù)據(jù)庫(kù)的重要組成部分,下面就為您介紹兩種主要MySQL表存儲(chǔ)結(jié)構(gòu)--MyISAM和InnoDB,希望對(duì)您能有所幫助。

發(fā)展壯大離不開(kāi)廣大客戶長(zhǎng)期以來(lái)的信賴(lài)與支持,我們將始終秉承“誠(chéng)信為本、服務(wù)至上”的服務(wù)理念,堅(jiān)持“二合一”的優(yōu)良服務(wù)模式,真誠(chéng)服務(wù)每家企業(yè),認(rèn)真做好每個(gè)細(xì)節(jié),不斷完善自我,成就企業(yè),實(shí)現(xiàn)共贏。行業(yè)涉及鑿毛機(jī)等,在重慶網(wǎng)站建設(shè)公司、營(yíng)銷(xiāo)型網(wǎng)站、WAP手機(jī)網(wǎng)站、VI設(shè)計(jì)、軟件開(kāi)發(fā)等項(xiàng)目上具有豐富的設(shè)計(jì)經(jīng)驗(yàn)。
什么是MyISAM?
MyISAM是MySQL關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的默認(rèn)儲(chǔ)存引擎。這種MySQL表存儲(chǔ)結(jié)構(gòu)從舊的ISAM代碼擴(kuò)展出許多有用的功能。在新版本的MySQL中,InnoDB引擎由于其對(duì)事務(wù),參照完整性,以及更高的并發(fā)性等優(yōu)點(diǎn)開(kāi)始廣泛的取代MyISAM。
每一個(gè)MyISAM表都對(duì)應(yīng)于硬盤(pán)上的三個(gè)文件。這三個(gè)文件有一樣的文件名,但是有不同的擴(kuò)展名以指示其類(lèi)型用途:.frm文件保存表的定義,但是這個(gè)文件并不是MyISAM引擎的一部,而是服務(wù)器的一部分;.MYD保存表的數(shù)據(jù);.MYI是表的索引文件。
什么是InnoDB?
InnoDB是MySQL的另一個(gè)存儲(chǔ)引擎,正成為目前MySQL AB所發(fā)行新版的標(biāo)準(zhǔn),被包含在所有二進(jìn)制安裝包里。較之于其它的存儲(chǔ)引擎它的優(yōu)點(diǎn)是它支持兼容ACID的事務(wù)(類(lèi)似于PostgreSQL),以及參數(shù)完整性(即對(duì)外鍵的支持)。
Oracle公司與2005年10月收購(gòu)了Innobase。Innobase采用雙認(rèn)證授權(quán)。它使用GNU發(fā)行,也允許其它想將InnoDB結(jié)合到商業(yè)軟件的團(tuán)體獲得授權(quán)。
目前比較普及的存儲(chǔ)引擎是MyISAM和InnoDB.而MyISAM又是絕大部分Web應(yīng)用的***。MyISAM與InnoDB的主要的不同點(diǎn)在于性能和事務(wù)控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method,現(xiàn)在用的MySQL5.0已經(jīng)不支持ISAM了)的擴(kuò)展實(shí)現(xiàn),ISAM被設(shè)計(jì)為適合處理讀頻率遠(yuǎn)大于寫(xiě)頻率這樣一種情況,因此ISAM以及后來(lái)的MyISAM都沒(méi)有考慮對(duì)事物的支持,排除了TPM,不需要事務(wù)記錄,ISAM的查詢(xún)效率相當(dāng)可觀,而且內(nèi)存占用很少。MyISAM在繼承了這類(lèi)優(yōu)點(diǎn)的同時(shí),與時(shí)俱進(jìn)的提供了大量實(shí)用的新特性和相關(guān)工具。例如考慮到并發(fā)控制,提供了表級(jí)鎖,雖然MyISAM本身不支持容錯(cuò),但可以通過(guò)myisamchk進(jìn)行故障恢復(fù)。而且由于MyISAM是每張表使用各自獨(dú)立的存儲(chǔ)文件(MYD數(shù)據(jù)文件和MYI索引文件),使得備份及恢復(fù)十分方便(拷貝覆蓋即可),而且還支持在線恢復(fù)。與其他存儲(chǔ)引擎比較,MyISAM具有檢查和修復(fù)表格的大多數(shù)工具. MyISAM表格可以被壓縮,而且它們支持全文搜索.它們不是事務(wù)安全的,而且也不支持外鍵
所以如果你的應(yīng)用是不需要事務(wù),處理的只是基本的CRUD操作,那么MyISAM是不二選擇
InnoDB被設(shè)計(jì)成適用于高并發(fā)讀寫(xiě)的情況.使用MVCC(Multi-Version Concurrency Control)以及行級(jí)鎖來(lái)提供遵從ACID的事務(wù)支持。InnoDB支持外鍵參照完整性,具備故障恢復(fù)能力。另外 InnoDB的性能其實(shí)還是不錯(cuò)的,特別是在處理大數(shù)據(jù)量的情況下,用官方的話說(shuō)就是: InnoDB的CPU效率是其他基于磁盤(pán)的關(guān)系數(shù)據(jù)庫(kù)存儲(chǔ)引擎所不能比的。不過(guò)InnoDB的備份恢復(fù)要麻煩一點(diǎn),除非你使用了4.1以后版本提供的Mulit-tablespace支持,因?yàn)镮nnoDB和MyISAM不同,他的數(shù)據(jù)文件并不是獨(dú)立對(duì)應(yīng)于每張表的。而是使用的共享表空間,簡(jiǎn)單的拷貝覆蓋方法對(duì)他不適用,必須在停掉MYSQL后對(duì)進(jìn)行數(shù)據(jù)恢復(fù)。使用Per-Table Tablespacesd,使其每張表對(duì)應(yīng)一個(gè)獨(dú)立的表空間文件,則情況要簡(jiǎn)單很多。它與BDB類(lèi)型具有相同的特性,它們還支持外鍵.InnoDB表格速度很快.具有比BDB還豐富的特性,因此如果需要一個(gè)事務(wù)安全的存儲(chǔ)引擎,建議使用它.
一般來(lái)說(shuō),如果需要事務(wù)支持,并且有較高的并發(fā)讀寫(xiě)頻率,InnoDB是不錯(cuò)的選擇。要是并發(fā)讀寫(xiě)頻率不高的話,其實(shí)可以考慮BDB,但由于在MySQL5.1及其以后版本中,將不再提供BDB支持。這個(gè)選項(xiàng)也就沒(méi)有了
InnoDB默認(rèn)情況下的事務(wù)是打開(kāi)的(set autocommit = 0)就是說(shuō)每插入一條記錄時(shí)候,InnoDB類(lèi)型的表都會(huì)把它當(dāng)作一個(gè)單獨(dú)的事務(wù)來(lái)處理.所以如果我們插入了10000條記錄,而且沒(méi)有將事務(wù)關(guān)閉,那么InnoDB類(lèi)型的表會(huì)把它當(dāng)作10000個(gè)事務(wù)來(lái)處理,此時(shí)插入的總時(shí)間是很多的,這個(gè)時(shí)候一定要首先把事務(wù)關(guān)掉再插入,這樣的速度就很快了
至于Heap和BDB(Berkeley DB),相對(duì)來(lái)說(shuō),普及率不如前兩種,但在有些情況下,還是挺適用的
Heap存儲(chǔ)引擎就是將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,由于沒(méi)有磁盤(pán)I./O的等待,速度極快。但由于是內(nèi)存存儲(chǔ)引擎,所做的任何修改在服務(wù)器重啟后都將消失。
Heap挺適合做測(cè)試的時(shí)候使用
BDB是MySQL***款事務(wù)安全的存儲(chǔ)引擎。在Berkeley DB database library的基礎(chǔ)上建立,同樣是事務(wù)安全的,但BDB的普及率顯然不及InnoDB,因?yàn)榇蠖鄶?shù)在MySQL中尋找支持事務(wù)的存儲(chǔ)引擎的同時(shí)也在找支持MVCC或是行級(jí)鎖定存儲(chǔ)引擎,而B(niǎo)DB只支持Page-level Lock。
附上一張《High Performance MySQL》 中的各存儲(chǔ)引擎的特性表
|
Attribute |
MyISAM |
Heap |
BDB |
InnoDB |
|---|---|---|---|---|
Transactions | No | No | Yes | Yes |
Lock granularity | Table | Table | Page (8 KB) | Row |
Storage | Split files | In-memory | Single file per table | Tablespace(s) |
Isolation levels | None | None | Read committed | All |
Portable format | Yes | N/A | No | Yes |
Referential integrity | No | No | No | Yes |
Primary key with data | No | No | Yes | Yes |
MySQL caches data records | No | Yes | Yes | Yes |
Availability | All versions | All versions | MySQL-Max | All Versions |
分享名稱(chēng):兩種主要MySQL表存儲(chǔ)結(jié)構(gòu)MyISAM和InnoDB比較
標(biāo)題鏈接:http://fisionsoft.com.cn/article/dpdjesd.html


咨詢(xún)
建站咨詢(xún)
