MySQL存儲引擎

mysql的存儲引擎是MySQL體系架構中的重要組成部分,也是MySQL體系結構的核心,插件式的存儲引擎更是它區別于其它數據庫的重要特征。它處于MySQL體系架構中Server端底層,是底層物理結構的實現,用于將數據以各種不同的技術方式存儲到文件或者內存中,不同的存儲引擎具備不同的存儲機制、索引技巧和鎖定水平。常見的MySQL存儲引擎有InnoDB、MyISAM、Memory、Archive等等,它們具備各自的特征,我們可以根據不同的具體應用來建立對應的存儲引擎表。
在談不同的存儲引擎之前,我們需要先理解幾個基本概念:

事務

事務是一組原子性的SQL語句或者說是一個獨立的工作單元,如果數據庫引擎能夠成功對數據庫應用這組SQL語句,那么就執行,如果其中有任何一條語句因為崩潰或其它原因無法執行,那么所有的語句都不會執行。也就是說,事務內的語句,要么全部執行成功,要么全部執行失敗。

讀鎖和寫鎖

無論何時,只要有多個SQL需要同一時刻修改數據,都會產生并發控制的問題。
假設一個公共郵箱,用戶A正在讀取郵箱,同時,用戶B正在刪除郵箱中的某個郵件,會產生什么結果呢?客戶A可能讀取時會報錯退出,也可能會讀取到不一致的郵箱數據。如果把郵箱當作數據庫中的一張表,可見其存在同樣的問題。
解決這類經典問題的方法就是并發控制,即在處理并發讀或者寫時,可以通過實現一個由兩種類型的鎖組成的鎖系統來解決問題。這兩種鎖就是共享鎖和排他鎖,也叫讀鎖和寫鎖。
讀鎖共享的,即相互不阻塞的,多個客戶在同一時刻可以讀取同一資源,互不干擾。寫鎖排他的,即一個寫鎖會阻塞其它的寫鎖和讀鎖,只有這樣,才能確保給定時間內,只有一個用戶能執行寫入,防止其它用戶讀取正在寫入的同一資源。寫鎖優先級高于讀鎖

行鎖和表鎖

實際數據庫系統中每時每刻都在發生鎖定,鎖也是有粒度的,提高共享資源并發行的方式就是讓鎖更有選擇性,盡量只鎖定需要修改的部分數據,而不是所有的資源,因此要進行精確的鎖定。但是由于加鎖也需要消耗資源,包括獲得鎖、檢查鎖是否解除、釋放鎖等,都會增加系統的開銷。所謂的鎖策略就是要在鎖的開銷和數據的安全性之間尋求平衡,這種平衡也會影響性能。

每種MySQL存儲引擎都有自己的鎖策略和鎖粒度,最常用的兩種重要的鎖策略分別是表鎖行鎖

表鎖是開銷最小的策略,會鎖定整張表,用戶對表做寫操作時,要先獲得寫鎖,這會阻塞其它用戶對該表的所有讀寫操作。沒有寫鎖時,其它讀取的用戶才能獲得讀鎖,讀鎖之間是不相互阻塞的。行鎖可以最大成都支持并發處理,但也帶來了最大的鎖開銷,它只對指定的記錄加鎖,其它進程還是可以對同一表中的其它記錄進行操作。表級鎖速度快,但沖突多,行級鎖沖突少,但速度慢

理解了上面幾個概念,我們就可以很好地分辨不同存儲引擎之間的區別了。

InnoDB存儲引擎

MySQL存儲引擎可以分為官方存儲引擎和第三方存儲引擎,InnoDB就是強大的第三方存儲引擎,具備較好的性能和自動崩潰恢復特性,目前應用極為廣泛,是當前MySQL存儲引擎中的主流,它在事務型存儲和非事務型存儲中都很流行。
InnoDB存儲引擎支持事務、支持行鎖、支持非鎖定讀、支持外鍵。支持最大64TB的數據量
如非特別原因,應用建表時都可以首選考慮使用InnoDB。

MyISAM存儲引擎

MyISAM存儲引擎是MySQL官方提供的存儲引擎,它在InnoDB出現并完善之前是MySQL存儲引擎的主流,但目前逐漸被淘汰主要因為其不支持事務
MyISAM不支持事務,不支持行級鎖,支持表鎖,支持全文索引,支持最大256TB的數據量,最大的缺陷是崩潰后無法安全恢復
MyISAM因設計簡單,數據以緊密格式存儲,所以某些場景下性能很好,但是它的表鎖又帶來了性能問題,如果你發現所有的查詢都長期處于“Locked”狀態,表鎖就是罪魁禍首了。
因此,對于只讀數據,或者表比較小,可以忍受修復操作的可以依然使用MyISAM,對于不需要事務的應用,選擇MyISAM存儲引擎,或許可以獲得更高的性能。

Memory存儲引擎

Memory存儲引擎將表中數據放在內存中,因此速度非常快,但因其支持表鎖,所以并發性能較差,最糟糕的是這個存儲引擎在數據庫重啟或崩潰之后表中的數據將全部丟失,它只適用于存儲臨時數據的臨時表,MySQL中一般使用這個存儲引擎來存放查詢的中間結果集,此外該引擎也不支持事務

Archive存儲引擎

Archive存儲引擎置只支持INSERT和SELECT操作,支持行鎖,但本身并不是事務安全的存儲引擎,其最大的優點是其具有較好的壓縮比,壓縮比一般可達到1:10,可以將同樣的數據以更小的磁盤空間占用來存儲。
Archive存儲引擎非常適合存儲歸檔數據,如歷史數據、日志信息數據等等,這類數據往往數據量非常大,并且基本只有INSERT和SELECT操作,使用這個存儲引擎可以非常節約磁盤空間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容