MySQL中常用存儲(chǔ)引擎它們相互之間有哪些區(qū)別

這篇文章給大家分享的是有關(guān)MySQL中常用存儲(chǔ)引擎它們相互之間有哪些區(qū)別的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧。

成都創(chuàng)新互聯(lián)專(zhuān)注于企業(yè)成都全網(wǎng)營(yíng)銷(xiāo)、網(wǎng)站重做改版、萬(wàn)載網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、商城網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性?xún)r(jià)比高,為萬(wàn)載等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

 MySQL中常用的四種存儲(chǔ)引擎分別是: MyISAM存儲(chǔ)引擎、innoDB存儲(chǔ)引擎、MEMORY存儲(chǔ)引擎、ARCHIVE存儲(chǔ)引擎。本文將對(duì)這四種存儲(chǔ)引擎作出重點(diǎn)介紹,最后對(duì)這四種存儲(chǔ)引擎進(jìn)行比較。

MySQL中的存儲(chǔ)引擎

一、存儲(chǔ)引擎

1、存儲(chǔ)引擎其實(shí)就是對(duì)于數(shù)據(jù)庫(kù)文件的一種存取機(jī)制,如何實(shí)現(xiàn)存儲(chǔ)數(shù)據(jù),如何為存儲(chǔ)的數(shù)據(jù)建立索引以及如何更新,查詢(xún)數(shù)據(jù)等技術(shù)實(shí)現(xiàn)的方法。

2、MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲(chǔ)在文件(或內(nèi)存)中,這些技術(shù)中的每一種技術(shù)都使用不同的存儲(chǔ)機(jī)制,索引技巧,鎖定水平并且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術(shù)及配套的相關(guān)功能稱(chēng)為存儲(chǔ)引擎。

二、MySQL中查看引擎

1、show  engines;  // 查看mysql所支持的存儲(chǔ)引擎,以及從中得到mysql默認(rèn)的存儲(chǔ)引擎。

2、show  variables  like '% storage_engine';   // 查看mysql 默認(rèn)的存儲(chǔ)引擎

3、show  create   table  tablename ;   //  查看具體某一個(gè)表所使用的存儲(chǔ)引擎,這個(gè)默認(rèn)存儲(chǔ)引擎被修改了!

4、show  table   status  from  database  where  name="tablename"   //準(zhǔn)確查看某個(gè)數(shù)據(jù)庫(kù)中的某一表所使用的存儲(chǔ)引擎

三、MySQL中常用的幾種存儲(chǔ)引擎:

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格式。
MyISAM類(lèi)型的表支持三種不同的存儲(chǔ)結(jié)構(gòu):靜態(tài)型、動(dòng)態(tài)型、壓縮型。
 靜態(tài)型:指定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長(zhǎng)度可變的數(shù)據(jù)類(lèi)型),這樣MySQL就會(huì)自動(dòng)使用靜態(tài)MyISAM格式。使用靜態(tài)格式的表的性能比較高,因?yàn)樵诰S護(hù)和訪問(wèn)以預(yù)定格式存儲(chǔ)數(shù)據(jù)時(shí)需要的開(kāi)銷(xiāo)很低;但這種高性能是以空間為代價(jià)換來(lái)的,因?yàn)樵诙x的時(shí)候是固定的,所以不管列中的值有多大,都會(huì)以最大值為準(zhǔn),占據(jù)了整個(gè)空間。
       動(dòng)態(tài)型:如果列(即使只有一列)定義為動(dòng)態(tài)的(xblob, xtext, varchar等數(shù)據(jù)類(lèi)型),這時(shí)MyISAM就自動(dòng)使用動(dòng)態(tài)型,雖然動(dòng)態(tài)型的表占用了比靜態(tài)型表較少的空間,但帶來(lái)了性能的降低,因?yàn)槿绻硞€(gè)字段的內(nèi)容發(fā)生改變則其位置很可能需要移動(dòng),這樣就會(huì)導(dǎo)致碎片的產(chǎn)生,隨著數(shù)據(jù)變化的增多,碎片也隨之增加,數(shù)據(jù)訪問(wèn)性能會(huì)隨之降低。
       對(duì)于因碎片增加而降低數(shù)據(jù)訪問(wèn)性這個(gè)問(wèn)題,有兩種解決辦法:
       a、盡可能使用靜態(tài)數(shù)據(jù)類(lèi)型;
       b、經(jīng)常使用optimize table table_name語(yǔ)句整理表的碎片,恢復(fù)由于表數(shù)據(jù)的更新和刪除導(dǎo)致的空間丟失。如果存儲(chǔ)引擎不支持 optimize table table_name則可以轉(zhuǎn)儲(chǔ)并        重新加載數(shù)據(jù),這樣也可以減少碎片;
       壓縮型:如果在數(shù)據(jù)庫(kù)中創(chuàng)建在整個(gè)生命周期內(nèi)只讀的表,則應(yīng)該使用MyISAM的壓縮型表來(lái)減少空間的占用。

優(yōu)缺點(diǎn):MyISAM的優(yōu)勢(shì)在于占用空間小,處理速度快。缺點(diǎn)是不支持事務(wù)的完整性和并發(fā)性。

2.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

優(yōu)缺點(diǎn):InnoDB的優(yōu)勢(shì)在于提供了良好的事務(wù)處理、崩潰修復(fù)能力和并發(fā)控制。缺點(diǎn)是讀寫(xiě)效率較差,占用的數(shù)據(jù)空間相對(duì)較大。

3.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ǔ)引擎中的表的生命周期很短,一般只使用一次。

4.ARCHIVE存儲(chǔ)引擎

該存儲(chǔ)引擎非常適合存儲(chǔ)大量獨(dú)立的、作為歷史記錄的數(shù)據(jù)。區(qū)別于InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但是這種引擎不支持索引,所以查詢(xún)性能較差一些。

四.四種存儲(chǔ)引擎比較

InnoDB:支持事務(wù)處理,支持外鍵,支持崩潰修復(fù)能力和并發(fā)控制。如果需要對(duì)事務(wù)的完整性要求比較高(比如銀行),要求實(shí)現(xiàn)并發(fā)控制(比如售票),那選擇InnoDB有很大的優(yōu)勢(shì)。如果需要頻繁的更新、刪除操作的數(shù)據(jù)庫(kù),也可以選擇InnoDB,因?yàn)橹С质聞?wù)的提交(commit)和回滾(rollback)。

MyISAM:插入數(shù)據(jù)快,空間和內(nèi)存使用比較低。如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實(shí)現(xiàn)處理高效率。如果應(yīng)用的完整性、并發(fā)性要求比 較低,也可以使用。如果數(shù)據(jù)表主要用來(lái)插入和查詢(xún)記錄,則MyISAM引擎能提供較高的處理效率

MEMORY:所有的數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。如果需要很快的讀寫(xiě)速度,對(duì)數(shù)據(jù)的安全性要求較低,可以選擇MEMOEY。它對(duì)表的大小有要求,不能建立太大的表。所以,這類(lèi)數(shù)據(jù)庫(kù)只使用在相對(duì)較小的數(shù)據(jù)庫(kù)表。如果只是臨時(shí)存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎,MySQL中使用該引擎作為臨時(shí)表,存放查詢(xún)的中間結(jié)果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高并發(fā)的插入操作,但是本身不是事務(wù)安全的。Archive非常適合存儲(chǔ)歸檔數(shù)據(jù),如記錄日志信息可以使用Archiv

注意,同一個(gè)數(shù)據(jù)庫(kù)也可以使用多種存儲(chǔ)引擎的表。如果一個(gè)表要求比較高的事務(wù)處理,可以選擇InnoDB。這個(gè)數(shù)據(jù)庫(kù)中可以將查詢(xún)要求比較高的表選擇MyISAM存儲(chǔ)。如果該數(shù)據(jù)庫(kù)需要一個(gè)用于查詢(xún)的臨時(shí)表,可以選擇MEMORY存儲(chǔ)引擎。

感謝各位的閱讀!關(guān)于MySQL中常用存儲(chǔ)引擎它們相互之間有哪些區(qū)別就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

網(wǎng)站名稱(chēng):MySQL中常用存儲(chǔ)引擎它們相互之間有哪些區(qū)別
文章轉(zhuǎn)載:http://www.muchs.cn/article48/gehsep.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、做網(wǎng)站、服務(wù)器托管、電子商務(wù)自適應(yīng)網(wǎng)站、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化