更新時(shí)間:2021-01-08 17:33:10 來(lái)源:動(dòng)力節(jié)點(diǎn) 瀏覽1766次
存儲(chǔ)引擎,也叫做表類(lèi)型,其具體作用便是決定一個(gè)數(shù)據(jù)表怎么處理和存儲(chǔ)表中的數(shù)據(jù),MySQL支持多種不同的存儲(chǔ)引擎,而且存儲(chǔ)引擎被設(shè)計(jì)為可插拔式的,在同一個(gè)數(shù)據(jù)庫(kù)中,不同的數(shù)據(jù)表可以使用不同的存儲(chǔ)引擎。Innodb是MySQL的默認(rèn)存儲(chǔ)引擎,也是常用的存儲(chǔ)引擎,另外比較常用的存儲(chǔ)引擎還有MyISAM、Momery以及ARCHIVE。本文我們就來(lái)聊聊這4種常用MySQL存儲(chǔ)引擎。
1.innoDB存儲(chǔ)引擎
存儲(chǔ)位置:MySQL如果使用InnoDB存儲(chǔ)引擎,數(shù)據(jù)庫(kù)文件類(lèi)型就包括.frm、ibdata1、.ibd,存放位置有兩個(gè),.frm文件默認(rèn)存放位置是C:\Documents and Settings\All Users\ApplicationData\MySQL\MySQL Server 5.1\data,ibdata1、.ibd文件默認(rèn)存放位置是MySQL安裝目錄下的data文件夾。
innodb存儲(chǔ)引擎的mysql表提供了事務(wù),回滾以及系統(tǒng)崩潰修復(fù)能力和多版本迸發(fā)控制的事務(wù)的安全。
innodb支持自增長(zhǎng)列(auto_increment),自增長(zhǎng)列的值不能為空,如果在使用的時(shí)候?yàn)榭盏脑捲鯐?huì)進(jìn)行自動(dòng)存現(xiàn)有的值開(kāi)始增值,如果有但是比現(xiàn)在的還大,則就保存這個(gè)值。
innodb存儲(chǔ)引擎支持外鍵(foreign key) ,外鍵所在的表稱(chēng)為子表而所依賴(lài)的表稱(chēng)為父表。
innodb存儲(chǔ)引擎最重要的是支持事務(wù),以及事務(wù)相關(guān)聯(lián)功能。
innodb存儲(chǔ)引擎支持mvcc的行級(jí)鎖。
innodb存儲(chǔ)引擎索引使用的是B+Tree
2.MEMORY存儲(chǔ)引擎
memory存儲(chǔ)引擎相比前面的一些存儲(chǔ)引擎,有點(diǎn)不一樣,其使用存儲(chǔ)在內(nèi)從中的數(shù)據(jù)來(lái)創(chuàng)建表,而且所有的數(shù)據(jù)也都存儲(chǔ)在內(nèi)存中。
每個(gè)基于memory存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤(pán)文件,該文件的文件名和表名是相同的,類(lèi)型為.frm。該文件只存儲(chǔ)表的結(jié)構(gòu),而其數(shù)據(jù)文件,都是存儲(chǔ)在內(nèi)存中,這樣有利于對(duì)數(shù)據(jù)的快速處理,提高整個(gè)表的處理能力。
memory存儲(chǔ)引擎默認(rèn)使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果讀者希望使用B樹(shù)型,則在創(chuàng)建的時(shí)候可以引用。
memory存儲(chǔ)引擎文件數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,如果mysqld進(jìn)程發(fā)生異常,重啟或關(guān)閉機(jī)器這些數(shù)據(jù)都會(huì)消失。所以memory存儲(chǔ)引擎中的表的生命周期很短,一般只使用一次。
3.MyISAM存儲(chǔ)引擎:
存放的位置:MySQL如果使用MyISAM存儲(chǔ)引擎,數(shù)據(jù)庫(kù)文件類(lèi)型就包括.frm、.MYD、.MYI,默認(rèn)存放位置是C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data
存放的方式: MyISAM 這種存儲(chǔ)引擎不支持事務(wù),不支持行級(jí)鎖,只支持并發(fā)插入的表鎖,主要用于高負(fù)載的select。
索引的方式: MyISAM也是使用B+tree索引但是和Innodb的在具體實(shí)現(xiàn)上有些不同。
該引擎基于ISAM數(shù)據(jù)庫(kù)引擎,除了提供ISAM里所沒(méi)有的索引和字段管理等大量功能,MyISAM還使用一種表格鎖定的機(jī)制來(lái)優(yōu)化多個(gè)并發(fā)的讀寫(xiě)操作,但是需要經(jīng)常運(yùn)行OPTIMIZE TABLE命令,來(lái)恢復(fù)被更新機(jī)制所浪費(fèi)的空間,否則碎片也會(huì)隨之增加,最終影響數(shù)據(jù)訪問(wèn)性能。MyISAM還有一些有用的擴(kuò)展,例如用來(lái)修復(fù)數(shù)據(jù)庫(kù)文件的MyISAMChk工具和用來(lái)恢復(fù)浪費(fèi)空間的 MyISAMPack工具。MyISAM強(qiáng)調(diào)了快速讀取操作,主要用于高負(fù)載的select,這可能也是MySQL深受Web開(kāi)發(fā)的主要原因:在Web開(kāi)發(fā)中進(jìn)行的大量數(shù)據(jù)操作都是讀取操作,所以大多數(shù)虛擬主機(jī)提供商和Internet平臺(tái)提供商(Internet Presence Provider,IPP)只允許使用MyISAM格式。
4.ARCHIVE存儲(chǔ)引擎
該存儲(chǔ)引擎非常適合存儲(chǔ)大量獨(dú)立的、作為歷史記錄的數(shù)據(jù)。區(qū)別于InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但是這種引擎不支持索引,所以查詢(xún)性能較差一些。
上述的4種MySQL存儲(chǔ)引擎各自有優(yōu)缺點(diǎn),除了都具有的存儲(chǔ)引擎的基本功能之外,都有自己的獨(dú)到之處。InnoDB支持事務(wù)處理,支持外鍵,支持崩潰修復(fù)能力和并發(fā)控制。MyISAM插入數(shù)據(jù)快,空間和內(nèi)存使用比較低。MEMORY數(shù)據(jù)的處理速度快,但是安全性不高。Archive非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信息可以使用Archive。想要學(xué)習(xí)更多的MySQL數(shù)據(jù)庫(kù)的相關(guān)知識(shí),快來(lái)觀看本站的MySQL教程一起學(xué)習(xí)吧!
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問(wèn)老師會(huì)電話與您溝通安排學(xué)習(xí)