這篇文章主要介紹“MySQL引擎間的區(qū)別有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql引擎間的區(qū)別有哪些”文章能幫助大家解決問題。
創(chuàng)新互聯(lián)公司專注于雁江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站開發(fā)。雁江網(wǎng)站建設(shè)公司,為雁江等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
區(qū)別:1、InnoDB引擎用于處理大量短期事務(wù),很少回滾;2、MyISAM引擎不支持事務(wù)和行級鎖,崩潰后無法安全恢復;3、Archive引擎支持Insert,Select操作;4、Blackhole引擎沒有任何存儲機制,會舍棄所有寫入數(shù)據(jù)。
本教程操作環(huán)境:windows10系統(tǒng)、mysql8.0.22版本、Dell G3電腦。
一、InnoDB
InnoDB是MySQL默認的事務(wù)型引擎,也是最重要、最廣泛的存儲引擎。它的設(shè)計是用來處理大量短期事務(wù),短期事務(wù)大部分是正常提交的,很少回滾。InnoDB的性能和自動崩潰恢復特性,使得它在非事務(wù)型存儲的需求中,也很流行。除了非常特別的原因需要使用其他引擎,InnoDB也是非常好值得花時間研究的對象。
InnoDB的數(shù)據(jù)存儲在表空間中,表空間是由InnoDB管理的黑盒文件系統(tǒng),由一系列系統(tǒng)文件組成。InnoDB可以將每個表的數(shù)據(jù)和索引存放在單獨的文件中。InnoDB也可以使用裸設(shè)備作為表空間存儲介質(zhì)。
InnoDB通過間隙鎖(next-key locking)防止幻讀的出現(xiàn)。InnoDB是基于聚簇索引建立,與其他存儲引擎有很大的區(qū)別,聚簇索引對主鍵查詢有很高的性能,不過它的二級索引(secondary index,非主鍵索引)必須包含主鍵列。所以如果主鍵列很大的話,索引會很大。
二、MyISAM
在5.1之前,MyISAM是默認的引擎,MyISAM有大量的特心態(tài),包括全文索引、壓縮、空間函數(shù)。但是MyISAM不支持事務(wù)和行級鎖,而且在崩潰后無法安全恢復。即使后續(xù)版本中MyISAM支持了事務(wù),但是很多人的概念中依然是不支持事務(wù)的引擎。
MyISAM并不是無所事處。對于一些只讀數(shù)據(jù),或者表空間較小,可以忍受恢復操作,可以使用MyISAM。MyISAM會將表存儲在兩個文件中:數(shù)據(jù)文件、索引文件。分別是.MYD、.MYI擴展名。MyISAM表可以包含動態(tài)或者靜態(tài)行。MySQL會根據(jù)表定義選擇那種行格式。MyISAM表的行記錄數(shù),取決于磁盤空間和操作系統(tǒng)中的單個文件最大尺寸。
在MySQL中,默認配置只能存儲256TB的數(shù)據(jù)。因為指向數(shù)據(jù)記錄的指針長度是6字節(jié)。需要修改可以修改表的MAX_ROWS和AVG_ROW_LENGTH選項。兩個相乘是最大的大小。會導致重建索引。
MyISAM是對整個表加鎖,而不是行鎖,讀取的時候?qū)Ρ砑庸蚕礞i,寫入的時候加排他鎖。但是在表有讀取查詢的同時,也可以往表內(nèi)寫入記錄。
對于MyISAM,即使是Blob,Text等等長字段,也可以基于前500字符創(chuàng)建索引,MyISAM支持全文索引,這是一個基于分詞創(chuàng)建的索引,也可以支持復雜的查詢。
MyISAM可以選擇延遲更新索引鍵,在創(chuàng)建表的時候指定delay_key_write選項,在每次修改執(zhí)行完成時,不會立刻將修改的索引數(shù)據(jù)寫入磁盤,而是寫到緩存區(qū),只有在清理緩存區(qū)或者關(guān)閉表的時候才會將索引寫入磁盤。這可以極大的提升寫入性能,但是在主機崩潰時會造成索引損壞,需要執(zhí)行修復操作。
MyISAM另一個特性是支持壓縮表。如果數(shù)據(jù)在寫入后不會修改,那么這個表適合MyISAM壓縮表??梢允褂胢yisampack對MyISAM表進行打包,壓縮表是不可以修改數(shù)據(jù)的。壓縮表可以極大的減少磁盤占用,因此可以減少磁盤IO,提升性能,壓縮表也支持索引,但是索引也是只讀的。
整體來說MyISAM并沒有那么不堪,但是由于沒有行鎖機制,所以在海量寫入的時候,會導致所有查詢處于Locked狀態(tài)。
其他存儲引擎
MySQL還有一些其他特殊用途的引擎,有些可能不再支持,具體支持情況參考數(shù)據(jù)庫支持引擎。
三、Archive
Archive引擎支持是Insert,Select操作,現(xiàn)在支持索引,Archive引擎會緩存所有的寫,并利用zlib對寫入行進行壓縮,所以比MyISAM表的磁盤IO更少。但是在每次Select查詢都需要執(zhí)行全表掃描。所以在Archive適合日志和數(shù)據(jù)采集應(yīng)用。這類應(yīng)用在分析時往往需要全表掃描忙活著更快的Insert操作場景中也可以使用。
Archive引擎支持行級鎖和專用的緩存區(qū),所以可以實現(xiàn)高并發(fā)寫入,在查詢開始到返回表存在的所有行數(shù)之前,Archive會阻止其他Select執(zhí)行,用來實現(xiàn)一致性讀。另外也實現(xiàn)了批量寫入結(jié)束前批量寫入數(shù)據(jù)對讀操作不可見,這種機制模仿了事務(wù)和MVCC的特性,但是Archive不是一個事務(wù)型引擎,而是針對高寫入壓縮做了優(yōu)化的簡單引擎。
四、Blackhole
Blackhole沒有實現(xiàn)任何存儲機制,它會舍棄所有寫入數(shù)據(jù),不做任何保存,但是服務(wù)器會記錄Blackhole表的日志,用于復制數(shù)據(jù)到備庫,或者只是簡單的記錄到日志,這種特殊的存儲引擎可以在一些特俗的復制架構(gòu)和日志審核時發(fā)揮作用。但是不推薦。
五、CSV
CSV引擎可以將普通的CSV文件作為MySQL表來處理,但是這種表不支持索引,CSV可以在數(shù)據(jù)庫運行時拷貝或者拷出文件,可以將Excel等電子表格中的數(shù)據(jù)存儲未CSV文件,然后復制到MySQL中,就能在MySQL中打開使用。同樣,如果將數(shù)據(jù)寫入到一個CSV引擎表,其他外部程序也可以從表的數(shù)據(jù)文件中讀取CSV的數(shù)據(jù)。因此CSV可以作為數(shù)據(jù)交換機制。非常好用。
六、Federated
Federated引擎是訪問其他MySQL服務(wù)器的一個代理,它會創(chuàng)建一個到遠程MySQL服務(wù)器的客戶端連接,并將查詢傳輸?shù)竭h程服務(wù)器執(zhí)行,然后提取或者發(fā)送需要的數(shù)據(jù)。最初設(shè)計該存儲引擎是為了和企業(yè)級數(shù)據(jù)庫如MicrosoftSQLServer和Oracle的類似特性競爭的,可以說更多的是一種市場行為。盡管該引擎看起來提供了一種很好的跨服務(wù)器的靈活性,但也經(jīng)常帶來問題,因此默認是禁用的。
七、Memroy
如果需要快速地訪問數(shù)據(jù),并且這些數(shù)據(jù)不會被修改,重啟以后丟失也沒有關(guān)系,那么使用Memory表(以前也叫做HEAP表)是非常有用的。Memory表至少比MyISAM表要快一個數(shù)量級,因為所有的數(shù)據(jù)都保存在內(nèi)存中,不需要進行磁盤I/O。Memory表的結(jié)構(gòu)在重啟以后還會保留,但數(shù)據(jù)會丟失。
八、Merge
Merge引擎是MyISAM引擎的一個變種。Merge表是由多個MyISAM表合并而來的虛擬表。如果將MySQL用于日志或者數(shù)據(jù)倉庫類應(yīng)用,該引擎可以發(fā)揮作用。但是引入分區(qū)功能后,該引擎已經(jīng)被放棄
九、NDB 集群 引擎
NDB集群存儲引擎,作為SQL和NDB原生協(xié)議之間的接口。MySQL服務(wù)器、NDB集群存儲引擎,以及分布式的、share-nothing的、容災(zāi)的、高可用的NDB數(shù)據(jù)庫的組合,被稱為MySQL集群(MySQLCluster)。
特殊
十、PERFORMANCE_SCHEMA
MySQL 5.5新增一個存儲引擎:命名PERFORMANCE_SCHEMA ,主要用于收集數(shù)據(jù)庫服務(wù)器性能參數(shù)。MySQL用戶是不能創(chuàng)建存儲引擎為PERFORMANCE_SCHEMA的表。
performance_schema提供以下功能:
提供進程等待的詳細信息,包括鎖、互斥變量、文件信息;
保存歷史的事件匯總信息,為提供MySQL服務(wù)器性能做出詳細的判斷;
對于新增和刪除監(jiān)控事件點都非常容易,并可以隨意改變mysql服務(wù)器的監(jiān)控周期,例如(CYCLE、MICROSECOND)
performance_schema功能開啟和部分表功能
Performance的開啟很簡單,在my.cnf中[mysqld]加入performanc_schema,檢查性能數(shù)據(jù)庫是否啟動的命令:
SHOW VARIABLES LIKE 'performance_schema';
若是返回的 值為ON,則說明性能數(shù)據(jù)庫正常開啟狀態(tài)。
關(guān)于“mysql引擎間的區(qū)別有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
網(wǎng)站標題:mysql引擎間的區(qū)別有哪些
當前地址:http://jinyejixie.com/article28/ipjejp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、網(wǎng)站制作、電子商務(wù)、網(wǎng)站設(shè)計公司、網(wǎng)站策劃、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)