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