想進階學習Mysql ? 那你必須懂懂這些!!MySql常用儲存引擎介紹和選擇
在資料庫中存的就是一張張有著千絲萬縷關係的表,所以表設計的好壞,直接影響著整個資料庫。而在設計表的時候,我們都會關注一個問題,使用什麼儲存引擎。等下,儲存引擎?什麼是儲存引擎呢?
儲存引擎
關係資料庫表用於儲存和組織資訊的資料結構,可以將表理解為由行和列組成的表格,類似於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.如何選擇正確的儲存引擎?
是否需要支援事務;
是否需要使用熱備;
崩潰恢復,能否接受崩潰;
是否需要外來鍵支援。
然後按照標準,選對應的儲存引擎即可。
總結
這篇文章總結了幾種比較常用的儲存引擎,對於實際工作,需要根據具體情況而定,結合實際專案例項進行應用,才是最好學習方法。