mysql的各種引擎

1.ISAM

該引擎在讀取數(shù)據(jù)方面速度很快,而且不占用大量的內(nèi)存和存儲(chǔ)資源;但是ISAM不支持事務(wù)處理、不支持外來(lái)鍵、不能夠容錯(cuò)、也不支持索引。該引擎在包括MySQL 5.1及其以上版本的數(shù)據(jù)庫(kù)中不再支持。

2. MyISAM

該引擎基于ISAM數(shù)據(jù)庫(kù)引擎,除了提供ISAM里所沒(méi)有的索引和字段管理等大量功能,MyISAM支持表級(jí)鎖.缺點(diǎn)同上.

3.?HEAP(也稱為MEMORY)

該存儲(chǔ)引擎通過(guò)在內(nèi)存中創(chuàng)建臨時(shí)表來(lái)存儲(chǔ)數(shù)據(jù)。每個(gè)基于該存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤(pán)文件,該文件的文件名和表名是相同的,類型為.frm。該磁盤(pán)文件只存儲(chǔ)表的結(jié)構(gòu),而其數(shù)據(jù)存儲(chǔ)在內(nèi)存中,所以使用該種引擎的表?yè)碛袠O高的插入、更新和查詢效率。這種存儲(chǔ)引擎默認(rèn)使用哈希(HASH)索引,其速度比使用B-+Tree型要快,但也可以使用B樹(shù)型索引。由于這種存儲(chǔ)引擎所存儲(chǔ)的數(shù)據(jù)保存在內(nèi)存中,所以其保存的數(shù)據(jù)具有不穩(wěn)定性,比如如果mysqld進(jìn)程發(fā)生異常、重啟或計(jì)算機(jī)關(guān)機(jī)等等都會(huì)造成這些數(shù)據(jù)的消失,所以這種存儲(chǔ)引擎中的表的生命周期很短,一般只使用一次。

4.CSV(Comma-Separated Values逗號(hào)分隔值)

使用該引擎的MySQL數(shù)據(jù)庫(kù)表會(huì)在MySQL安裝目錄data文件夾中的和該表所在數(shù)據(jù)庫(kù)名相同的目錄中生成一個(gè).CSV文件(所以,它可以將CSV類型的文件當(dāng)做表進(jìn)行處理),這種文件是一種普通文本文件,每個(gè)數(shù)據(jù)行占用一個(gè)文本行。該種類型的存儲(chǔ)引擎不支持索引,即使用該種類型的表沒(méi)有主鍵列;另外也不允許表中的字段為null。

5.BLACKHOLE(黑洞引擎)

該存儲(chǔ)引擎支持事務(wù),而且支持mvcc的行級(jí)鎖,寫(xiě)入這種引擎表中的任何數(shù)據(jù)都會(huì)消失,主要用于做日志記錄或同步歸檔的中繼存儲(chǔ),這個(gè)存儲(chǔ)引擎除非有特別目的,否則不適合使用。(作為主從復(fù)制中的中繼重復(fù)器或在其上面添加過(guò)濾器機(jī)制,例如,假設(shè)你的應(yīng)用需要從服務(wù)器側(cè)的過(guò)濾規(guī)則,但傳輸所有二進(jìn)制日志數(shù)據(jù)到從服務(wù)器會(huì)導(dǎo)致較大的網(wǎng)絡(luò)流量。在這種情況下,在主服務(wù)器主機(jī)上建立一個(gè)偽從服務(wù)器進(jìn)程。)

解釋:

主服務(wù)器的操作寫(xiě)入二進(jìn)制日志,偽mysqld進(jìn)程作為從服務(wù)器,在偽mysqld進(jìn)程上配置replicate-do和replicate-ignore規(guī)則,并且寫(xiě)一個(gè)新的,被過(guò)濾的二進(jìn)制日志 。這個(gè)已過(guò)濾日志被提供給其他真正的從服務(wù)器。因?yàn)閭芜M(jìn)程不存儲(chǔ)任何數(shù)據(jù),只消耗很小的額外的mysqld進(jìn)程資源。這個(gè)類型的建立可以用額外復(fù)制從服務(wù)器來(lái)重復(fù)。

6.ARCHIVE

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

7.??InnoDB

該存儲(chǔ)引擎為MySQL表提供了ACID事務(wù)支持、系統(tǒng)崩潰修復(fù)能力和多版本并發(fā)控制(即MVCC Multi-Version Concurrency Control)的行級(jí)鎖;該引擎支持自增長(zhǎng)列(auto_increment),自增長(zhǎng)列的值不能為空,如果在使用的時(shí)候?yàn)榭談t自動(dòng)從現(xiàn)有值開(kāi)始增值,如果有但是比現(xiàn)在的還大,則直接保存這個(gè)值; 該引擎存儲(chǔ)引擎支持外鍵(foreign key) ,外鍵所在的表稱為子表而所依賴的表稱為父表。該引擎在5.5后的MySQL數(shù)據(jù)庫(kù)中為默認(rèn)存儲(chǔ)引擎。

8.PERFORMANCE_SCHEMA

該引擎主要用于收集數(shù)據(jù)庫(kù)服務(wù)器性能參數(shù)。這種引擎提供以下功能:提供進(jìn)程等待的詳細(xì)信息,包括鎖、互斥變量、文件信息;保存歷史的事件匯總信息,為提供MySQL服務(wù)器性能做出詳細(xì)的判斷;對(duì)于新增和刪除監(jiān)控事件點(diǎn)都非常容易,并可以隨意改變mysql服務(wù)器的監(jiān)控周期,例如(CYCLE、MICROSECOND)。

9.?Berkeley(BDB)

該存儲(chǔ)引擎支持COMMIT和ROLLBACK等其他事務(wù)特性。該引擎在包括MySQL 5.1及其以上版本的數(shù)據(jù)庫(kù)中不再支持。

10.Merge

該引擎將一定數(shù)量的MyISAM表聯(lián)合而成一個(gè)整體。

11.??Cluster/NDB

該存儲(chǔ)引擎用于多臺(tái)數(shù)據(jù)機(jī)器聯(lián)合提供服務(wù)以提高整體性能和安全性。適合數(shù)據(jù)量大、安全和性能要求高的場(chǎng)景。

MySQL 存儲(chǔ)引擎(MyISAM、InnoDB、NDBCluster)

MyISAM

1.特性

不支持事務(wù):MyISAM存儲(chǔ)引擎不支持事務(wù),所以對(duì)事務(wù)有要求的業(yè)務(wù)場(chǎng)景不能使用

表級(jí)鎖定:其鎖定機(jī)制是表級(jí)索引,這雖然可以讓鎖定的實(shí)現(xiàn)成本很小但是也同時(shí)大大降低了其并發(fā)性能

讀寫(xiě)互相阻塞:不僅會(huì)在寫(xiě)入的時(shí)候阻塞讀取,MyISAM還會(huì)在讀取的時(shí)候阻塞寫(xiě)入,但讀本身并不會(huì)阻塞另外的讀

只會(huì)緩存索引:MyISAM可以通過(guò)key_buffer緩存以大大提高訪問(wèn)性能減少磁盤(pán)IO,但是這個(gè)緩存區(qū)只會(huì)緩存索引,而不會(huì)緩存數(shù)據(jù)

2.適用場(chǎng)景

不需要事務(wù)支持(不支持)

并發(fā)相對(duì)較低(鎖定機(jī)制問(wèn)題)

數(shù)據(jù)修改相對(duì)較少(阻塞問(wèn)題)

以讀為主

數(shù)據(jù)一致性要求不是非常高

3.最佳實(shí)踐

盡量索引(緩存機(jī)制)

調(diào)整讀寫(xiě)優(yōu)先級(jí),根據(jù)實(shí)際需求確保重要操作更優(yōu)先

啟用延遲插入改善大批量寫(xiě)入性能

盡量順序操作讓insert數(shù)據(jù)都寫(xiě)入到尾部,減少阻塞

分解大的操作,降低單個(gè)操作的阻塞時(shí)間

降低并發(fā)數(shù),某些高并發(fā)場(chǎng)景通過(guò)應(yīng)用來(lái)進(jìn)行排隊(duì)機(jī)制

對(duì)于相對(duì)靜態(tài)的數(shù)據(jù),充分利用Query Cache可以極大的提高訪問(wèn)效率

MyISAM的Count只有在全表掃描的時(shí)候特別高效,帶有其他條件的count都需要進(jìn)行實(shí)際的數(shù)據(jù)訪問(wèn)

InnoDB

1.特性

具有較好的事務(wù)支持:支持4個(gè)事務(wù)隔離級(jí)別,支持多版本讀

行級(jí)鎖定:通過(guò)索引實(shí)現(xiàn),全表掃描仍然會(huì)是表鎖,注意間隙鎖的影響

讀寫(xiě)阻塞與事務(wù)隔離級(jí)別相關(guān)

具有非常高效的緩存特性:能緩存索引,也能緩存數(shù)據(jù)

整個(gè)表和主鍵以Cluster方式存儲(chǔ),組成一顆平衡樹(shù)

所有Secondary Index都會(huì)保存主鍵信息

2.適用場(chǎng)景

需要事務(wù)支持(具有較好的事務(wù)特性)

行級(jí)鎖定對(duì)高并發(fā)有很好的適應(yīng)能力,但需要確保查詢是通過(guò)索引完成

數(shù)據(jù)更新較為頻繁的場(chǎng)景

數(shù)據(jù)一致性要求較高

硬件設(shè)備內(nèi)存較大,可以利用InnoDB較好的緩存能力來(lái)提高內(nèi)存利用率,盡可能減少磁盤(pán) IO

3.最佳實(shí)踐

主鍵盡可能小,避免給Secondary index帶來(lái)過(guò)大的空間負(fù)擔(dān)

避免全表掃描,因?yàn)闀?huì)使用表鎖

盡可能緩存所有的索引和數(shù)據(jù),提高響應(yīng)速度

在大批量小插入的時(shí)候,盡量自己控制事務(wù)而不要使用autocommit自動(dòng)提交

合理設(shè)置innodb_flush_log_at_trx_commit參數(shù)值,不要過(guò)度追求安全性

避免主鍵更新,因?yàn)檫@會(huì)帶來(lái)大量的數(shù)據(jù)移動(dòng)

NDBCluster

1.特性

分布式:分布式存儲(chǔ)引擎,可以由多個(gè)NDBCluster存儲(chǔ)引擎組成集群分別存放整體數(shù)據(jù)的一部分

支持事務(wù):和Innodb一樣,支持事務(wù)

可與mysqld不在一臺(tái)主機(jī):可以和mysqld分開(kāi)存在于獨(dú)立的主機(jī)上,然后通過(guò)網(wǎng)絡(luò)和mysqld通信交互

內(nèi)存需求量巨大:新版本索引以及被索引的數(shù)據(jù)必須存放在內(nèi)存中,老版本所有數(shù)據(jù)和索引必須存在與內(nèi)存中

2.適用場(chǎng)景

具有非常高的并發(fā)需求

對(duì)單個(gè)請(qǐng)求的響應(yīng)并不是非常的critical

查詢簡(jiǎn)單,過(guò)濾條件較為固定,每次請(qǐng)求數(shù)據(jù)量較少,又不希望自己進(jìn)行水平Sharding

3.最佳實(shí)踐

盡可能讓查詢簡(jiǎn)單,避免數(shù)據(jù)的跨節(jié)點(diǎn)傳輸

盡可能滿足SQL節(jié)點(diǎn)的計(jì)算性能,大一點(diǎn)的集群SQL節(jié)點(diǎn)會(huì)明顯多余Data節(jié)點(diǎn)

在各節(jié)點(diǎn)之間盡可能使用萬(wàn)兆網(wǎng)絡(luò)環(huán)境互聯(lián),以減少數(shù)據(jù)在網(wǎng)絡(luò)層傳輸過(guò)程中的延時(shí)

4. 它的限制

4.1 不支持臨時(shí)表。

4.2 不支持基于TEXT and BLOB 字段的索引。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容