mysql的幾種存儲引擎

數據庫存儲引擎的作用:

在mysql中,數據是採用多種不同的技術存儲在內存中的,而每一項技術都使用不同的存儲機制、索引技巧、索引水平來提供不同的功能與能力。
存儲引擎也可以說爲是數據庫中的表類型,設定了存儲引擎的數據表在數據存儲方面、更新以及查詢都會有相應的效果。
存儲引擎能夠保護數據,控制訪問權限和快速處理事務。
存儲引擎能夠提供日常管理支持以優化數據庫的性能。

存儲引擎主要有(9種):
MyIsam , InnoDB, Memory, Blackhole, CSV, Performance_Schema, Archive, Federated , Mrg_Myisam,本文不做全部介紹,有興趣請自行研究。

MyIsam :

1.基於ISAM數據庫引擎。

2.提供ISAM裏所沒有的索引和字段管理等大量功能。

3.使用一種表格鎖定的機制來優化多個併發的讀寫操作,但是需要經常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間,否則碎片也會隨之增加,最終影響數據訪問性能。

4.快速讀取操作,主要用於高負載的select。

5.工具:修復數據庫文件的MyISAMChk工具和用來恢復浪費空間的 MyISAMPack工具。

6.不能在表損壞後恢復數據。(是不能主動恢復)。

MyISAM類型的表支持三種不同的存儲結構:靜態型、動態型、壓縮型。
適用場景:

一、不支持事務的設計,但是並不代表着有事務操作的項目不能用MyIsam存儲引擎,可以在service層進行根據自己的業務需求進行相應的控制。

二、不支持外鍵的表設計。

三、查詢速度很快,如果數據庫insert和update的操作比較多的話比較適用。

四、整天 對錶進行加鎖的場景。

五、MyISAM極度強調快速讀取操作。

六、MyIASM中存儲了表的行數,於是SELECT COUNT(*) FROM TABLE時只需要直接讀取已經保存好的值而不需要進行全表掃描。如果表的讀操作遠遠多於寫操作且不需要數據庫事務的支持,那麼MyIASM也是很好的選擇。

InnoDB

1.提供了ACID事務支持、系統崩潰修復能力和多版本併發控制的行級鎖。

2.支持自增長列(auto_increment),自增長列的值不能爲空,如果在使用的時候爲空則自動從現有值開始增值,如果有但是比現在的還大,則直接保存這個值。

3.支持外鍵(foreign key) ,外鍵所在的表稱爲子表而所依賴的表稱爲父表。

4.該引擎在5.5後的MySQL數據庫中爲默認存儲引擎。

適用場景

一、經常更新的表,適合處理多重併發的更新請求。

二、支持事務。

三、可以從災難中恢復(通過bin-log日誌等)。

四、外鍵約束。只有他支持外鍵。

五、支持自動增加列屬性auto_increment。

Memory/HEAP

1.使用存在內存中的內容來創建表。

2.每個MEMORY表只實際對應一個磁盤文件。

3.MEMORY類型的表訪問非常得快,因爲它的數據是放在內存中的,並且默認使用HASH索引,但是一旦服務關閉,表中的數據就會丟失掉。 HEAP允許只駐留在內存裏的臨時表格,駐留在內存裏讓HEAP要比ISAM和MYISAM都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那麼所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間。HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。

4.支持散列索引和B樹索引,B樹索引可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數據挖掘,散列索引相等的比較快但是對於範圍的比較慢很多。

5.要求存儲的數據是數據長度不變的格式,比如,Blob和Text類型的數據不可用(長度不固定的)。

6.要記住,在用完表格之後就刪除表格。

適用場景:

一、那些內容變化不頻繁的代碼表,或者作爲統計操作的中間結果表,便於高效地堆中間結果進行分析並得到最終的統計結果。

二、目標數據比較小,而且非常頻繁的進行訪問,在內存中存放數據,如果太大的數據會造成內存溢出。可以通過參數max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。

三、數據是臨時的,而且必須立即可用得到,那麼就可以放在內存中。

四、存儲在Memory表中的數據如果突然間丟失的話也沒有太大的關係。

Mrg_Myisam:(分表的一種方式–水平分表)

1.將MyIsam引擎的多個表聚合起來,但是他的內部沒有數據,真正的數據依然是MyIsam引擎的表中,但是可以直接進行查詢、刪除更新等操作。

2.同一種類的數據會根據數據的時間分爲多個表,如果這時候進行查詢的話,就會比較麻煩,Merge可以直接將多個表聚合成一個表統一查詢,然後再刪除Merge表(刪除的是定義),原來的數據不會影響。

Blackhole(黑洞引擎)

1.任何寫入到此引擎的數據均會被丟棄掉, 不做實際存儲。

2.Select語句的內容永遠是空。

下面對InnoDB和MyIsam進行比較:

對比插入效率(百萬級插入):(雖然速度上MyISAM快,但是增刪改是涉及事務安全的,所以用InnoDB相對好很多)

對比更新:(雖然速度上MyISAM快,但是增刪改是涉及事務安全的,所以InnoDB相對好很多)

參考鏈接:https://www.cnblogs.com/sunsky303/p/8274586.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章