常用的mysql儲存引擎及其特點

2021-09-11 08:20:53 字數 2658 閱讀 3343

文章參考:《mysql快速入門》潘凱華,李慧,劉欣等編著.—背景:清華大學出版社,2012.1

儲存引擎說白了就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料等技術的實現方法。因為在關聯式資料庫中資料的儲存是以表的形式儲存的,所以儲存引擎也可以成為表型別)(及儲存和操作此表的型別)。

oracle和sql server等資料庫只有一種儲存引擎,也就是innodb。

下面介紹mysql常見儲存引擎:

1、innodb儲存引擎(mysql預設儲存引擎)

特點:

· 提供的功能:事務、回滾、奔潰修復能力和多版本併發控制的事務安全。

· 是mysql是第乙個提供外來鍵約束的表引擎。

· 支援自動增長列auto_increment(mysql中規定自動增長列的必須為主鍵)。

優缺點:

· 優勢在於提供了良好的事務管理、奔潰修復能力和併發控制。

· 缺點是讀寫效率稍差,占用的資料空間相對比較大。

適用場合:

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

· 事務:innodb儲存引擎是唯一支援事務的標準mysql儲存引擎,這是管理敏感資料(如金融資訊和使用者註冊資訊)的必須軟體

· 自動災難恢復:與其他儲存引擎不一樣,innodb表能夠自動從災難中恢復。雖然myisam表也能在災難後修復,但其過程要長的多

附:

2、myisam儲存引擎

前身:

· myisam儲存引擎是基於isam儲存引擎發展起來的。

檔案型別(myisam儲存引擎的表儲存成3個檔案,檔名與表名相同,副檔名包括frm、myd、myi):

· frm:儲存表的結構;

· myd:儲存資料,是mydata的縮寫;

· myi:儲存索引,是myindex的縮寫;

儲存格式:

· myisam靜態:如果所有表列的大小都是靜態的(即不使用xblob、xtext或者varchar資料型別),mysql就會自動使用靜態myisam格式,使用這種型別的表的效能非常高,因為在訪問和維護以預定義格式儲存的資料時需要很低的開銷,但是卻要以控制項為代價。

· myisam動態:如果有表列(及時只有一列)定義為動態的(使用xblob、xtext、varchar),mysql就會自動使用動態格式。雖然myisam動態表占用的空間比靜態格式所佔空間少,但空間的節省帶來了效能的下降。如果某個欄位的內容發生改變,其位置很可能就需要移動,這會導致碎片的產生。隨著資料集中的碎片增加,資料訪問效能就會相應降低。這個問題有兩種修復方法:

a. 盡可能使用靜態資料型別。

b. 經常使用optimize table語句,他會整理表的碎片,恢復由於表更新和刪除而導致的空間丟失。

· myisam壓縮:有時會建立在整個應用程式生命週期中都唯讀的表。如果是這種情況,就可以使用myisampack工具將其轉換為myisam壓縮表來減少空間。在給定硬體配置情況下,效能的提公升將相當顯著。

優缺點:

· myisam儲存引擎的優勢在於占用空間小,處理速度快,缺點是不支援事務和併發性。

3、memory儲存引擎

前言:

memory儲存引擎是mysql中的一類特殊的儲存引擎。其使用儲存在記憶體中的內容來建立表,而且所有資料也放在記憶體中。

memory儲存引擎的檔案儲存形式:

· 每個基於memory儲存引擎的表實際對應乙個磁碟檔案。該檔案的檔名與表名相同,型別為frm。該檔案只儲存表的結構。而其資料檔案都是儲存在記憶體中。這樣有利於對資料的快速處理,提高整個表的處理效率。

memory儲存引擎的索引型別:

· memory儲存引擎預設使用雜湊(hash)索引。其速度要比使用btree索引快。

memory儲存引擎的儲存週期:

· memory儲存引擎通常很少用到。因為memory表的所有資料都是儲存在記憶體上的,如果記憶體出現異常就會影響到資料的完整性。如果重啟機器或者關機,表中的所有資料都會消失。因此memory儲存引擎的表生命週期很短,一般都是一次性的。

memory儲存引擎的優缺點:

· memory表的大小是受到限制的。表的大小主要取決於兩個引數,分別是max_rows和max_heap_table_size。其中,max_rows可以在建立表時指定:max_heap_table_size的大小預設為16mb,可以按需要進行擴大。因其存在記憶體中的特性,這類表的處理速度非常快。但是其資料容易丟失,生命周期短。(注意:mysqld守護程序奔潰時,所有的memory資料都會丟失)

· memory表不支援varchar、blob、text資料型別,因為這種表型別按固定長度的記錄格式儲存。此外,如果使用版本4.1.0之前的mysql,這不支援自動增長列。

適用場景:

· 暫時:目標資料只是臨時需要,在其生命週期中必須立即可用。

· 相對無關:儲存在memory表中的資料如果突然丟失,不會對應用服務產生實質的負面影響,而且不會對資料完整性有長期影響。

MYSQL常用儲存引擎

一 innodb 儲存引擎 innodb 儲存引擎自 mysql 5.5 版本起被指定為預設的儲存引擎,用於完成事務 回滾 崩潰修復和多版本併發控制的事務安全處理。同時也是 mysql中第乙個提供外來鍵約束的表引擎,尤其對事務處理的能力,是 mysql 其他儲存引擎所無法與之比擬的。innodb 的...

常用Mysql儲存引擎

innodb是事務型資料庫的首選引擎,支援事物安全表 acid 支援行鎖定和外來鍵。mysql5.5.5之後,innodb作為預設引擎。innodb主要特性 1.innodb給mysql提供 回滾和崩潰恢復能力的事物安全 acid相容 儲存引擎。innodb鎖定在行級並且也在select語句中提供乙...

MySQL常用的儲存引擎

mysql常用的儲存引擎為myisam innodb memory merge,其中innodb提供事務安全表,其他儲存引擎都是非事務安全表。myisam是mysql的預設儲存引擎。myisam不支援事務 也不支援外來鍵,但其訪問速度快,對事務完整性沒有要求。innodb儲存引擎提供了具有提交 回滾...