更新時間:2021-01-18 17:43:57 來源:動力節點 瀏覽1646次
MEMORY是MySQL中一類非常特殊的存儲引擎,與MySQL中其他的存儲引擎不同的是MEMORY存儲引擎創建包含存儲在內存中的內容的專用表。由于數據容易受到崩潰,硬件問題或斷電的影響,因此只能將這些表用作臨時工作區或從其他表中提取數據的只讀緩存。
MEMORY引擎的典型用例涉及以下特征:
1.涉及瞬態非關鍵數據的操作,例如會話管理或緩存。當MySQL服務器暫停或重新啟動時,MEMORY表中的數據將丟失。
2.內存存儲,可實現快速訪問和低延遲。數據卷可以完全適合內存,而不會導致操作系統交換虛擬內存頁。
3.只讀或讀取是主要數據訪問模式(有限更新)。
每個基于MEMORY存儲引擎的表實際對應一個磁盤文件。該文件的文件名與表名相同,類型為frm類型。該文件中只存儲表的結構。而其數據文件,都是存儲在內存中,這樣有利于數據的快速處理,提高整個表的效率。值得注意的是,服務器需要有足夠的內存來維持MEMORY存儲引擎的表的使用。如果不需要了,可以釋放內存,甚至刪除不需要的表。
MEMORY默認使用哈希索引。速度比使用B型樹索引快。當然如果你想用B型樹索引,可以在創建索引時指定。
MEMORY性能受到處理更新時單線程執行和表鎖開銷導致的爭用的限制。這會限制負載增加時的可伸縮性,特別是對于包含寫的混合語句。盡管對MEMORY表進行了內存處理,但它們不一定比繁忙服務器上的InnoDB表,通用查詢或讀/寫工作負載更快。特別是,執行更新所涉及的表鎖定會減慢來自多個會話的MEMORY表的并發使用。根據在MEMORY表上執行的查詢類型,您可以創建索引作為默認哈希數據結構(用于基于唯一鍵查找單個值)或通用B樹數據結構(適用于所有類型涉及等于,不等式或范圍運算符(例如小于或大于)的查詢)。以下部分說明了創建這兩種索引的語法。常見的性能問題是在工作負載中使用默認哈希索引,但是B樹索引更有效。
MEMORY存儲引擎將數據存在內存,為了提高數據的訪問速度,每一個表實際上和一個磁盤文件關聯。這在某種程度上決定了MEMORY存儲引擎的特性:
(1)支持的數據類型有限制,比如:不支持TEXT和BLOB類型,對于字符串類型的數據,只支持固定長度的行,VARCHAR會被自動存儲為CHAR類型;
(2)支持的鎖粒度為表級鎖。所以,在訪問量比較大時,表級鎖會成為MEMORY存儲引擎的瓶頸;
(3)由于數據是存放在內存中,一旦服務器出現故障,數據都會丟失;
(4)查詢的時候,如果有用到臨時表,而且臨時表中有BLOB,TEXT類型的字段,那么這個臨時表就會轉化為MyISAM類型的表,性能會急劇降低;
(5)默認使用hash索引。
(6)如果一個內部表很大,會轉化為磁盤表。
相對于MySQL數據庫的首選存儲引擎—InnoDB,MEMORY存儲引擎似乎毫無競爭力,但總體而言,MEMORY存儲引擎擁有極高的插入,更新和查詢效率。想要全面掌握MEMORY存儲引擎的小伙伴,快來本站的MySQL教程,開啟你的學習之旅吧!
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習