本篇文章給大家分享的是有關(guān)帶你了解mysql中的存儲引擎,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識和豐厚的資源優(yōu)勢,提供專業(yè)的網(wǎng)站策劃、網(wǎng)站制作、成都做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開發(fā)、網(wǎng)站改版等服務(wù),在成都十年的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都上千家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。mysql存儲引擎概述
什么是存儲引擎?
MySQL中的數(shù)據(jù)用各種不同的技術(shù)存儲在文件(或者內(nèi)存)中。這些技術(shù)中的每一種技術(shù)都使用不同的存儲機(jī)制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術(shù),你能夠獲得額外的速度或者功能,從而改善你的應(yīng)用的整體功能。
例如,如果你在研究大量的臨時(shí)數(shù)據(jù),你也許需要使用內(nèi)存存儲引擎。內(nèi)存存儲引擎能夠在內(nèi)存中存儲所有的表格數(shù)據(jù)。又或者,你也許需要一個(gè)支持事務(wù)處理的數(shù)據(jù)庫(以確保事務(wù)處理不成功時(shí)數(shù)據(jù)的回退能力)。
這些不同的技術(shù)以及配套的相關(guān)功能在MySQL中被稱作存儲引擎(也稱作表類型)。
MySQL默認(rèn)配置了許多不同的存儲引擎,可以預(yù)先設(shè)置或者在MySQL服務(wù)器中啟用。你可以選擇適用于服務(wù)器、數(shù)據(jù)庫和表格的存儲引擎,以便在選擇如何存儲你的信息、如何檢索這些信息以及你需要你的數(shù)據(jù)結(jié)合什么性能和功能的時(shí)候?yàn)槟闾峁┐蟮撵`活性。
選擇如何存儲和檢索你的數(shù)據(jù)的這種靈活性是MySQL為什么如此受歡迎的主要原因。其它數(shù)據(jù)庫系統(tǒng)(包括大多數(shù)商業(yè)選擇)僅支持一種類型的數(shù)據(jù)存儲。
遺憾的是,其它類型的數(shù)據(jù)庫解決方案采取的“一個(gè)尺碼滿足一切需求”的方式意味著你要么就犧牲一些性能,要么你就用幾個(gè)小時(shí)甚至幾天的時(shí)間詳細(xì)調(diào)整你的數(shù)據(jù)庫。使用MySQL,我們僅需要修改我們使用的存儲引擎就可以了
mysql支持哪些存儲引擎?
mysql5.6支持的存儲引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。其中NDB和InnoDB提供事務(wù)安全表,其他存儲引擎都是非事務(wù)安全表。
各種存儲引擎的特性
概覽
MySQL服務(wù)器采用了多層設(shè)計(jì)和獨(dú)立模塊,插件式存儲引擎體系結(jié)構(gòu),允許將存儲引擎加載到正在運(yùn)新的MySQL服務(wù)器中,圖中的Pluggable Storage Engines部分。采用MySQL服務(wù)器體系結(jié)構(gòu),由于在存儲級別上(也就是Pluggable Storage Engines)提供了一致和簡單的應(yīng)用模型和API,應(yīng)用程序編程人員和DBA可不再考慮所有的底層實(shí)施細(xì)節(jié)。因此,盡管不同的存儲引擎具有不同的能力,應(yīng)用程序是與之分離的。存儲引擎就司職與文件系統(tǒng)打交道了。
各種存儲引擎的特性
并發(fā)性:某些應(yīng)用程序比其他應(yīng)用程序具有很多的顆粒級鎖定要求(如行級鎖定)。
事務(wù)支持:并非所有的應(yīng)用程序都需要事務(wù),但對的確需要事務(wù)的應(yīng)用程序來說,有著定義良好的需求,如ACID兼容等。
引用完整性:通過DDL定義的外鍵,服務(wù)器需要強(qiáng)制保持關(guān)聯(lián)數(shù)據(jù)庫的引用完整性。
物理存儲:它包括各種各樣的事項(xiàng),從表和索引的總的頁大小,到存儲數(shù)據(jù)所需的格式,到物理磁盤。
索引支持:不同的應(yīng)用程序傾向于采用不同的索引策略,每種存儲引擎通常有自己的編制索引方法,但某些索引方法(如B-tree索引)對幾乎所有的存儲引擎來說是共同的。
內(nèi)存高速緩沖:與其他應(yīng)用程序相比,不同的應(yīng)用程序?qū)δ承﹥?nèi)存高速緩沖策略的響應(yīng)更好,因此,盡管某些內(nèi)存高速緩沖對所有存儲引擎來說是共同的(如用于用戶連接的高速緩沖,MySQL的高速查詢高速緩沖等),其他高速緩沖策略僅當(dāng)使用特殊的存儲引擎時(shí)才唯一定義。
性能幫助:包括針對并行操作的多I/O線程,線程并發(fā)性,數(shù)據(jù)庫檢查點(diǎn),成批插入處理等。
其他目標(biāo)特性:可能包括對地理空間操作的支持,對特定數(shù)據(jù)處理操作的安全限制等。
以上要求會在不同的需求中予以體現(xiàn),通過單獨(dú)一個(gè)系統(tǒng)實(shí)現(xiàn)是不可能的,以上特點(diǎn)有些本身就是相互矛盾的,魚和熊掌的問題。對以上內(nèi)容做些選擇,形成的存儲引擎就是一個(gè)插件引擎了,某些特定的需求可以使用。如下圖,部分現(xiàn)有的存儲引擎以及基本特點(diǎn):
各種搜索引擎介紹
InnoDB
MySql 5.6 版本默認(rèn)的存儲引擎。InnoDB 是一個(gè)事務(wù)安全的存儲引擎,它具備提交、回滾以及崩潰恢復(fù)的功能以保護(hù)用戶數(shù)據(jù)。InnoDB 的行級別鎖定以及 Oracle 風(fēng)格的一致性無鎖讀提升了它的多用戶并發(fā)數(shù)以及性能。InnoDB 將用戶數(shù)據(jù)存儲在聚集索引中以減少基于主鍵的普通查詢所帶來的 I/O 開銷。為了保證數(shù)據(jù)的完整性,InnoDB 還支持外鍵約束。
MyISAM
MyISAM既不支持事務(wù)、也不支持外鍵、其優(yōu)勢是訪問速度快,但是表級別的鎖定限制了它在讀寫負(fù)載方面的性能,因此它經(jīng)常應(yīng)用于只讀或者以讀為主的數(shù)據(jù)場景。
Memory
在內(nèi)存中存儲所有數(shù)據(jù),應(yīng)用于對非關(guān)鍵數(shù)據(jù)由快速查找的場景。Memory類型的表訪問數(shù)據(jù)非???,因?yàn)樗臄?shù)據(jù)是存放在內(nèi)存中的,并且默認(rèn)使用HASH索引,但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會丟失
BLACKHOLE
黑洞存儲引擎,類似于 Unix 的 /dev/null,Archive 只接收但卻并不保存數(shù)據(jù)。對這種引擎的表的查詢常常返回一個(gè)空集。這種表可以應(yīng)用于 DML 語句需要發(fā)送到從服務(wù)器,但主服務(wù)器并不會保留這種數(shù)據(jù)的備份的主從配置中。
CSV
它的表真的是以逗號分隔的文本文件。CSV 表允許你以 CSV 格式導(dǎo)入導(dǎo)出數(shù)據(jù),以相同的讀和寫的格式和腳本和應(yīng)用交互數(shù)據(jù)。由于 CSV 表沒有索引,你最好是在普通操作中將數(shù)據(jù)放在 InnoDB 表里,只有在導(dǎo)入或?qū)С鲭A段使用一下 CSV 表。
NDB
(又名 NDBCLUSTER)——這種集群數(shù)據(jù)引擎尤其適合于需要最高程度的正常運(yùn)行時(shí)間和可用性的應(yīng)用。注意:NDB 存儲引擎在標(biāo)準(zhǔn) MySql 5.6 版本里并不被支持。目前能夠支持
MySql 集群的版本有:基于 MySql 5.1 的 MySQL Cluster NDB 7.1;基于 MySql 5.5 的 MySQL Cluster NDB 7.2;基于 MySql 5.6 的 MySQL Cluster NDB 7.3。同樣基于 MySql 5.6 的 MySQL Cluster NDB 7.4 目前正處于研發(fā)階段。
Merge
允許 MySql DBA 或開發(fā)者將一系列相同的 MyISAM 表進(jìn)行分組,并把它們作為一個(gè)對象進(jìn)行引用。適用于超大規(guī)模數(shù)據(jù)場景,如數(shù)據(jù)倉庫。
Federated
提供了從多個(gè)物理機(jī)上聯(lián)接不同的 MySql 服務(wù)器來創(chuàng)建一個(gè)邏輯數(shù)據(jù)庫的能力。適用于分布式或者數(shù)據(jù)市場的場景。
Example
這種存儲引擎用以保存闡明如何開始寫新的存儲引擎的 MySql 源碼的例子。它主要針對于有興趣的開發(fā)人員。這種存儲引擎就是一個(gè)啥事也不做的 "存根"。你可以使用這種引擎創(chuàng)建表,但是你無法向其保存任何數(shù)據(jù),也無法從它們檢索任何索引。
常用存儲引擎及適用場景
InnoDB
用于事務(wù)處理應(yīng)用程序,支持外鍵和行級鎖。如果應(yīng)用對事物的完整性有比較高的要求,在并發(fā)條件下要求數(shù)據(jù)的一致性,數(shù)據(jù)操作除了插入和查詢之外,還包括很多更新和刪除操作,那么InnoDB存儲引擎是比較合適的。InnoDB除了有效的降低由刪除和更新導(dǎo)致的鎖定,還可以確保事務(wù)的完整提交和回滾,對于類似計(jì)費(fèi)系統(tǒng)或者財(cái)務(wù)系統(tǒng)等對數(shù)據(jù)準(zhǔn)確要求性比較高的系統(tǒng)都是合適的選擇。
事務(wù)
MyISAM
如果應(yīng)用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務(wù)的完整性、并發(fā)性要求不高,那么可以選擇這個(gè)存儲引擎。
Memory
將所有的數(shù)據(jù)保存在內(nèi)存中,在需要快速定位記錄和其他類似數(shù)據(jù)的環(huán)境下,可以提供極快的訪問。Memory的缺陷是對表的大小有限制,雖然數(shù)據(jù)庫因?yàn)楫惓=K止的話數(shù)據(jù)可以正常恢復(fù),但是一旦數(shù)據(jù)庫關(guān)閉,存儲在內(nèi)存中的數(shù)據(jù)都會丟失。
存儲引擎在mysql中的使用
存儲引擎相關(guān)sql語句
--查看當(dāng)前的默認(rèn)存儲引擎: mysql> show variables like "default_storage_engine"; --查詢當(dāng)前數(shù)據(jù)庫支持的存儲引擎 mysql> show engines \G;