這篇文章給大家分享的是有關MySQL中常用存儲引擎它們相互之間有哪些區(qū)別的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、萬載網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5高端網(wǎng)站建設、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿(mào)網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為萬載等各大城市提供網(wǎng)站開發(fā)制作服務。
MySQL中常用的四種存儲引擎分別是: MyISAM存儲引擎、innoDB存儲引擎、MEMORY存儲引擎、ARCHIVE存儲引擎。本文將對這四種存儲引擎作出重點介紹,最后對這四種存儲引擎進行比較。
MySQL中的存儲引擎
一、存儲引擎
1、存儲引擎其實就是對于數(shù)據(jù)庫文件的一種存取機制,如何實現(xiàn)存儲數(shù)據(jù),如何為存儲的數(shù)據(jù)建立索引以及如何更新,查詢數(shù)據(jù)等技術實現(xiàn)的方法。
2、MySQL中的數(shù)據(jù)用各種不同的技術存儲在文件(或內(nèi)存)中,這些技術中的每一種技術都使用不同的存儲機制,索引技巧,鎖定水平并且最終提供廣泛的不同功能和能力。在MySQL中將這些不同的技術及配套的相關功能稱為存儲引擎。
二、MySQL中查看引擎
1、show engines; // 查看mysql所支持的存儲引擎,以及從中得到mysql默認的存儲引擎。
2、show variables like '% storage_engine'; // 查看mysql 默認的存儲引擎
3、show create table tablename ; // 查看具體某一個表所使用的存儲引擎,這個默認存儲引擎被修改了!
4、show table status from database where name="tablename" //準確查看某個數(shù)據(jù)庫中的某一表所使用的存儲引擎
三、MySQL中常用的幾種存儲引擎:
MyISAM存儲引擎:
存放的位置: MySQL如果使用MyISAM存儲引擎,數(shù)據(jù)庫文件類型就包括.frm、.MYD、.MYI,默認存放位置是C:\Documentsand Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data
存放的方式: MyISAM 這種存儲引擎不支持事務,不支持行級鎖,只支持并發(fā)插入的表鎖,主要用于高負載的select。
索引的方式: MyISAM也是使用B+tree索引但是和Innodb的在具體實現(xiàn)上有些不同。
該引擎基于ISAM數(shù)據(jù)庫引擎,除了提供ISAM里所沒有的索引和字段管理等大量功能,MyISAM還使用一種表格鎖定的機制來優(yōu)化多個并發(fā)的讀寫操作,但是需要經(jīng)常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間,否則碎片也會隨之增加,最終影響數(shù)據(jù)訪問性能。MyISAM還有一些有用的擴展,例如用來修復數(shù)據(jù)庫文件的MyISAMChk工具和用來恢復浪費空間的 MyISAMPack工具。MyISAM強調(diào)了快速讀取操作,主要用于高負載的select,這可能也是MySQL深受Web開發(fā)的主要原因:在Web開發(fā)中進行的大量數(shù)據(jù)操作都是讀取操作,所以大多數(shù)虛擬主機提供商和Internet平臺提供商(Internet Presence Provider,IPP)只允許使用MyISAM格式。
MyISAM類型的表支持三種不同的存儲結構:靜態(tài)型、動態(tài)型、壓縮型。
靜態(tài)型:指定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的數(shù)據(jù)類型),這樣MySQL就會自動使用靜態(tài)MyISAM格式。使用靜態(tài)格式的表的性能比較高,因為在維護和訪問以預定格式存儲數(shù)據(jù)時需要的開銷很低;但這種高性能是以空間為代價換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,占據(jù)了整個空間。
動態(tài)型:如果列(即使只有一列)定義為動態(tài)的(xblob, xtext, varchar等數(shù)據(jù)類型),這時MyISAM就自動使用動態(tài)型,雖然動態(tài)型的表占用了比靜態(tài)型表較少的空間,但帶來了性能的降低,因為如果某個字段的內(nèi)容發(fā)生改變則其位置很可能需要移動,這樣就會導致碎片的產(chǎn)生,隨著數(shù)據(jù)變化的增多,碎片也隨之增加,數(shù)據(jù)訪問性能會隨之降低。
對于因碎片增加而降低數(shù)據(jù)訪問性這個問題,有兩種解決辦法:
a、盡可能使用靜態(tài)數(shù)據(jù)類型;
b、經(jīng)常使用optimize table table_name語句整理表的碎片,恢復由于表數(shù)據(jù)的更新和刪除導致的空間丟失。如果存儲引擎不支持 optimize table table_name則可以轉儲并 重新加載數(shù)據(jù),這樣也可以減少碎片;
壓縮型:如果在數(shù)據(jù)庫中創(chuàng)建在整個生命周期內(nèi)只讀的表,則應該使用MyISAM的壓縮型表來減少空間的占用。
優(yōu)缺點:MyISAM的優(yōu)勢在于占用空間小,處理速度快。缺點是不支持事務的完整性和并發(fā)性。
2.innoDB存儲引擎
存儲位置:MySQL如果使用InnoDB存儲引擎,數(shù)據(jù)庫文件類型就包括.frm、ibdata1、.ibd,存放位置有兩個,.frm文件默認存放位置是C:\Documents and Settings\All Users\ApplicationData\MySQL\MySQL Server 5.1\data,ibdata1、.ibd文件默認存放位置是MySQL安裝目錄下的data文件夾。
innodb存儲引擎的mysql表提供了事務,回滾以及系統(tǒng)崩潰修復能力和多版本迸發(fā)控制的事務的安全。
innodb支持自增長列(auto_increment),自增長列的值不能為空,如果在使用的時候為空的話怎會進行自動存現(xiàn)有的值開始增值,如果有但是比現(xiàn)在的還大,則就保存這個值。
innodb存儲引擎支持外鍵(foreign key) ,外鍵所在的表稱為子表而所依賴的表稱為父表。
innodb存儲引擎最重要的是支持事務,以及事務相關聯(lián)功能。
innodb存儲引擎支持mvcc的行級鎖。
innodb存儲引擎索引使用的是B+Tree
優(yōu)缺點:InnoDB的優(yōu)勢在于提供了良好的事務處理、崩潰修復能力和并發(fā)控制。缺點是讀寫效率較差,占用的數(shù)據(jù)空間相對較大。
3.MEMORY存儲引擎
memory存儲引擎相比前面的一些存儲引擎,有點不一樣,其使用存儲在內(nèi)從中的數(shù)據(jù)來創(chuàng)建表,而且所有的數(shù)據(jù)也都存儲在內(nèi)存中。
每個基于memory存儲引擎的表實際對應一個磁盤文件,該文件的文件名和表名是相同的,類型為.frm。該文件只存儲表的結構,而其數(shù)據(jù)文件,都是存儲在內(nèi)存中,這樣有利于對數(shù)據(jù)的快速處理,提高整個表的處理能力。
memory存儲引擎默認使用哈希(HASH)索引,其速度比使用B-+Tree型要快,如果讀者希望使用B樹型,則在創(chuàng)建的時候可以引用。
memory存儲引擎文件數(shù)據(jù)都存儲在內(nèi)存中,如果mysqld進程發(fā)生異常,重啟或關閉機器這些數(shù)據(jù)都會消失。所以memory存儲引擎中的表的生命周期很短,一般只使用一次。
4.ARCHIVE存儲引擎
該存儲引擎非常適合存儲大量獨立的、作為歷史記錄的數(shù)據(jù)。區(qū)別于InnoDB和MyISAM這兩種引擎,ARCHIVE提供了壓縮功能,擁有高效的插入速度,但是這種引擎不支持索引,所以查詢性能較差一些。
四.四種存儲引擎比較
InnoDB:支持事務處理,支持外鍵,支持崩潰修復能力和并發(fā)控制。如果需要對事務的完整性要求比較高(比如銀行),要求實現(xiàn)并發(fā)控制(比如售票),那選擇InnoDB有很大的優(yōu)勢。如果需要頻繁的更新、刪除操作的數(shù)據(jù)庫,也可以選擇InnoDB,因為支持事務的提交(commit)和回滾(rollback)。
MyISAM:插入數(shù)據(jù)快,空間和內(nèi)存使用比較低。如果表主要是用于插入新記錄和讀出記錄,那么選擇MyISAM能實現(xiàn)處理高效率。如果應用的完整性、并發(fā)性要求比 較低,也可以使用。如果數(shù)據(jù)表主要用來插入和查詢記錄,則MyISAM引擎能提供較高的處理效率
MEMORY:所有的數(shù)據(jù)都在內(nèi)存中,數(shù)據(jù)的處理速度快,但是安全性不高。如果需要很快的讀寫速度,對數(shù)據(jù)的安全性要求較低,可以選擇MEMOEY。它對表的大小有要求,不能建立太大的表。所以,這類數(shù)據(jù)庫只使用在相對較小的數(shù)據(jù)庫表。如果只是臨時存放數(shù)據(jù),數(shù)據(jù)量不大,并且不需要較高的數(shù)據(jù)安全性,可以選擇將數(shù)據(jù)保存在內(nèi)存中的Memory引擎,MySQL中使用該引擎作為臨時表,存放查詢的中間結果
如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高并發(fā)的插入操作,但是本身不是事務安全的。Archive非常適合存儲歸檔數(shù)據(jù),如記錄日志信息可以使用Archiv
注意,同一個數(shù)據(jù)庫也可以使用多種存儲引擎的表。如果一個表要求比較高的事務處理,可以選擇InnoDB。這個數(shù)據(jù)庫中可以將查詢要求比較高的表選擇MyISAM存儲。如果該數(shù)據(jù)庫需要一個用于查詢的臨時表,可以選擇MEMORY存儲引擎。
感謝各位的閱讀!關于MySQL中常用存儲引擎它們相互之間有哪些區(qū)別就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
網(wǎng)站名稱:MySQL中常用存儲引擎它們相互之間有哪些區(qū)別
文章轉載:http://chinadenli.net/article48/gehsep.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供、做網(wǎng)站、服務器托管、電子商務、自適應網(wǎng)站、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)