您好,登錄后才能下訂單哦!
這篇文章主要介紹“什么是Mysql存儲引擎”,在日常操作中,相信很多人在什么是Mysql存儲引擎問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是Mysql存儲引擎”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
InnoDB是MySQL的默認事務(wù)型引擎,也是最重要、使用最廣泛的存儲引擎,它被設(shè)計用來處理大量的短期事務(wù),InnoDB的性能和自動崩潰恢復(fù)特性,使得它在非事務(wù)存儲的需求中也很流行。除非有非常特別的原因使用其它的存儲引擎,否則應(yīng)該優(yōu)先考慮InnoDB引擎。InnoDB采用MVCC來支持高并發(fā),并且實現(xiàn)了四個標(biāo)準的隔離級別。InnoDB基于聚簇索引建立。并且內(nèi)部做了很多優(yōu)化,包括從磁盤讀取數(shù)據(jù)時采用的可預(yù)測性預(yù)讀,能夠在內(nèi)存中創(chuàng)建hash索引以加速讀操作的自適應(yīng)哈希索引,以及能夠加速插入操作的插入緩沖區(qū)等。
MySQL 5.1及之前的版本默認的存儲引擎。提供了大量的特性,包括全文索引、壓縮、空間函數(shù)等,但是不支持事務(wù)和行級鎖,而且有一個毫無疑問的缺陷就是崩潰后無法安全恢復(fù)。對于只讀的數(shù)據(jù),或者表比較小,可以忍受修復(fù)repair操作,則依然可以繼續(xù)使用MyISAM。主要特性有:加鎖與并發(fā),整張表加鎖而不是針對行(造成性能問題),讀取時會對需要讀到的所有表加共享鎖,寫入時則對表加排它鎖,但是在表有讀取查詢的同時,也可以往表中插入新的記錄(稱為并發(fā)插入);修復(fù),可以手動或者自動執(zhí)行檢查和修復(fù)操作,但會導(dǎo)致一些數(shù)據(jù)丟失,而且修復(fù)操作是非常慢的。(check table mytable,repair table mytable);支持前綴索引和全文索引,后者基于分詞創(chuàng)建,可以支持復(fù)雜的查詢;延遲更新索引建,指定DELAY_KEY_WRITE選項,在每次修改執(zhí)行完成后,不會立即將修改的索引數(shù)據(jù)寫入磁盤,而是會寫到內(nèi)存中的鍵緩沖區(qū),只有在清理鍵緩沖區(qū)或者關(guān)閉表的時候才會將對應(yīng)的索引塊寫入磁盤。這種方式可以極大提升寫入性能,但是在數(shù)據(jù)庫或者主機崩潰時會造成索引損壞,需要執(zhí)行修復(fù)操作;支持壓縮表,但壓縮后不可修改(除非解除壓縮、修改數(shù)據(jù)然后再次壓縮),有利于減少磁盤空間占用,減少磁盤I/O提升查詢性能。
所有數(shù)據(jù)保存在內(nèi)存中,不需要進行磁盤IO,至少比MyISAM表一個數(shù)量級,適合快速訪問數(shù)據(jù),并且這些數(shù)據(jù)不會被修改,重啟會丟失。適合查找或者映射表,緩存周期性聚合數(shù)據(jù)或者保存數(shù)據(jù)分析產(chǎn)生的中間數(shù)據(jù)等場景。
與臨時表不同,臨時表指使用create temporary table語句創(chuàng)建的表,它可以使用任何存儲引擎,臨時表只在單個連接中可見,當(dāng)連接斷開臨時表也將不復(fù)存在。
只支持insert和select操作,會緩存所有的寫并利用zlib對插入的行進行壓縮,所以比MyISAM的表I/O更少。適合日志和數(shù)據(jù)采集類應(yīng)用,是一個針對高速插入和壓縮做了優(yōu)化的簡單引擎。
大部分情況下,InnoDB都是正確的選擇,也是默認的存儲引擎。除非需要用到某些InnoDB不具備的特性,并且沒有其它辦法可以替代,否則都應(yīng)該優(yōu)先選擇InnoDB引擎。
如果需要事務(wù)支持,那么InnoDB是目前最穩(wěn)點并且經(jīng)過驗證的選擇。
如果需要在線熱備份,那么選擇InnoDB就是最基本的要求,如果可以定期地關(guān)閉服務(wù)器來執(zhí)行備份,那么備份的因素則可以忽略。
數(shù)據(jù)量比較大的時候,系統(tǒng)崩潰后如何快速地恢復(fù)是一個需要考慮的問題。相對而言,MyISAM崩潰后發(fā)生損壞的概率比InnoDB要高很多,而且恢復(fù)速度也慢。
比如只有MyISAM支持地理空間搜索,InnoDB支持聚簇索引等。
這類應(yīng)用對插入速度有很高的要求,數(shù)據(jù)庫不能成為瓶頸,MyISAM或者Archive存儲引擎對這類應(yīng)用比較合適,因為開銷低,而且插入速度非??臁H绻枰獙τ涗浀娜罩咀龇治鰣蟊?,生成報表的sql可能導(dǎo)致插入效率明顯降低,如何解決?一、利用MySQL內(nèi)置的復(fù)制方案將數(shù)據(jù)復(fù)制一份到備庫,然后在備庫上執(zhí)行比消耗時間和CPU的查詢,主庫用于高效的插入工作。二、表分時間段存儲,對歷史表的頻繁查詢操作不會干擾到最新當(dāng)前表上的插入操作。
讀多寫少的場景,如果不介意MyISAM的崩潰恢復(fù)問題,那么MyISAM是合適的,MyISAM只會將數(shù)據(jù)寫入到內(nèi)存中,然后等待操作系統(tǒng)定期將數(shù)據(jù)刷出到磁盤上。
不要輕信“MyISAM比InnoDB快”之類的經(jīng)驗之談,這個結(jié)論不是絕對的,在很多已知的場景中,InnoDB的速度都可以讓MyISAM望塵莫及,尤其是使用到聚簇索引,后者需要訪問的數(shù)據(jù)都可以放入內(nèi)存的應(yīng)用。當(dāng)設(shè)計上述類型的應(yīng)用時,建議采用InnoDB。MyISAM隨著應(yīng)用壓力的上升,則可能迅速惡化,各種鎖爭用、崩潰后的數(shù)據(jù)丟失等問題都會隨之而來。
事務(wù)支持是必要選項,同時考慮外鍵支持情況,InnoDB是訂單處理類應(yīng)用的最佳選擇。
到此,關(guān)于“什么是Mysql存儲引擎”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。