您當前的位置:首頁 > 文化

想進階學習Mysql ? 那你必須懂懂這些!!MySql常用儲存引擎介紹和選擇

作者:由 IT架構師Allen 發表于 文化時間:2020-11-24

在資料庫中存的就是一張張有著千絲萬縷關係的表,所以表設計的好壞,直接影響著整個資料庫。而在設計表的時候,我們都會關注一個問題,使用什麼儲存引擎。等下,儲存引擎?什麼是儲存引擎呢?

儲存引擎

關係資料庫表用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式。有的表簡單有的表複雜,有的表根本不用儲存任何長期的資料,有的表讀取非常快,但是插入資料時卻很差;我們在實際開發過程中,可能需要各種各樣的表,不同的表,意味著儲存不同型別的資料,資料的處理上也會存在差異。那麼,對MySQL來說,它提供了很多種型別的儲存引擎,我們可以根據對資料處理的需求,選擇不同儲存引擎,從而最大限度利用MySQL強大的功能。這篇博文將總結和分析各個引擎特點,以及適用場合,並不會糾結更深層次的東西。我的學習方法是先學會用懂得怎麼用,再去知道到底是如何能用的。下面就對MySQL支援的儲存引擎進行簡單介紹。

1.MySql常用儲存引擎之MyISAM

MyISAM是獨立於作業系統的,這說明可以輕鬆地將其從Windows伺服器移植到Linux伺服器;每當我們建立一個MyISAM引擎的表時,就會在本地磁碟上建立三個檔案,檔名就是表名稱。例如,我建立了一個MyISAM引擎的tb_Demo表,那麼就會生成以下三個檔案:

tb_demo。frm儲存表定義;

tb_demo。MYD儲存表資料;

tb_demo。MYI儲存表索引。

特性:

併發性與鎖級別;

表損壞修復:check table tablename;repair table tablename;

MyISAM表支援的索引型別;

MyISAM表支援資料壓縮 命令列:myisampack。

使用場景:

選擇密集型表。MyISAM儲存引擎在篩選大量資料時非常快,是它最突出的優點;

插入密集型表。MyISAM的併發插入特性允許同時選擇、插入資料。例如:MyISAM儲存引擎非常適合管理郵件或Web伺服器日誌資料。

2.MySql常用儲存引擎之InnoDB

InnoDB是一個健壯的事務型儲存引擎,這種儲存引擎已經被很多網際網路公司使用,為使用者操作非常大的資料儲存提供一個強大的解決方案。Innodb使用表空間進行資料儲存。

特性:

Innodb是一種事務性儲存引擎;

完全支援事務的ACID特性;

Redo Log 和 Undo Log;

Innodb支援行級鎖;

行級鎖可以最大程度的支援併發;

行級鎖是由儲存引擎層實現的。

使用場景:

更新密集的表。InnoDB儲存引擎特別適合處理多重併發的更新請求;

事務。InnoDB儲存引擎是支援事務的標準MySQL儲存引擎;

自動災難恢復。與其它的儲存引擎不同,InnoDB表能夠自動從災難中恢復;

外來鍵約束。支援外來鍵的儲存引擎只有InnoDB;

支援自動增加列AUTO_INCREMENT屬性。

一般來說,如果需要事務支援,並且有較高的併發讀取頻率,InnoDB是很不錯的選擇。

3.MySql常用儲存引擎之CSV

CSV儲存引擎可以將csv檔案作為mysql的表進行處理。儲存格式就是普通的csv檔案。

檔案系統儲存特點:

資料以文字方式儲存在檔案中;

。CSV檔案儲存表內容;

。CSM檔案存數表的元資料如表狀態和資料量;

。frm檔案儲存表結構資訊。

特性:

以CSV格式進行資料儲存;

所有列必須都是不能為NULL的;

不支援索引;

可以對資料檔案直接編輯。

使用場景:適合作為資料交換的中間表。

4.MySql常用儲存引擎之Archive

Archive就是歸檔的意思,在歸檔之後很多的高階功能就不再支援了,僅支援最基本的插入和查詢兩種功能。在MySQL 5。5版前,Archive不支援索引,但是在MySQL 5。5以後的版本中就開始支援索引了。Archive擁有很好的壓縮機制,使用zlib壓縮庫,在記錄被請求時會實時壓縮,所以它經常被用來當做倉庫使用。

檔案系統儲存特點:

以zlib對錶資料進行壓縮,磁碟I/O更少;

資料儲存在ARZ為字尾的檔案中。

特性:

只支援insert和select操作;

只允許在自增ID列上加索引。

使用場景:日誌和資料採集類應用。

5.MySql常用儲存引擎之Memory

Memory是MySQL中一類特殊的儲存引擎。它使用儲存在記憶體中的內容來建立表,而且資料全部放在記憶體中。這些特性與前面的兩個很不同。

檔案系統儲存特點:也稱HEAP儲存引擎,所以資料儲存在記憶體中 。

特性:

支援HASH索引和BTree索引;

所有欄位都為固定長度 varchar(10) = char(10);

不支援BLOG和TEXT等大欄位;

Memory儲存引擎使用表級鎖;

最大大小由max_heap_table_size引數決定。

使用場景:

目標資料較小,而且被非常頻繁地訪問。在記憶體中存放資料,所以會造成記憶體的使用,可以透過引數max_heap_table_size控制Memory表的大小,設定此引數就可以限制Memory表最大大小;

如果資料是臨時的,而且要求必須立即可用,那麼就可以存放在記憶體表中;

儲存在Memory表中的資料如突然丟失,不會對應用服務產生實質的負面影響。

6.MySql常用儲存引擎之Federated

Federated是聯盟的意思,就是把兩個不同區域的資料庫聯絡起來,以致可以訪問在遠端資料庫的表中的資料,而不是本地的表。

特性:

提供了訪問遠端MySQL伺服器上表的方法;

本地不儲存資料,資料全部放到遠端伺服器上;

本地需要儲存表結構和遠端伺服器的連線資訊;

使用場景: 偶爾的統計分析及手工查詢。

7.如何選擇正確的儲存引擎?

是否需要支援事務;

是否需要使用熱備;

崩潰恢復,能否接受崩潰;

是否需要外來鍵支援。

然後按照標準,選對應的儲存引擎即可。

總結

這篇文章總結了幾種比較常用的儲存引擎,對於實際工作,需要根據具體情況而定,結合實際專案例項進行應用,才是最好學習方法。

標簽: 儲存  引擎  資料  支援  MySQL