MySQL存儲引擎

概述

存儲引擎是什麼?

MySQL中的數據用各種不同的技術存儲在文件中,這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,額能夠獲得額外的速度或功能,改善應用功能。

存儲引擎

1.InnoDB

InnoDB是一個健壯的事務性存儲引擎,有行級鎖定和外鍵約束,適用於以下場合:

  1. 更新密集的表。InnoDB存儲引擎適合處理多重併發的更新請求。
  2. 事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
  3. 自動災難恢復。與其他存儲引擎不同,InnoDB表能夠自動從災難中恢復。
  4. 外鍵約束。MYSQL支持外鍵的存儲引擎只用InnoDB。
  5. 支持自動增長列auto_increment屬性。

另外,從MySQL5.7開始InnoDB就成為默認的存儲引擎。

2.MyISAM

MyISAM表是獨立於操作系統的,這說明可以輕鬆的將其從Windows服務器移植到Linux服務器。每當簡歷一個MyISAM引擎的表時,就會創建三個文件,文件名是表名,三個文件如下:

  • db_name.frm: 存儲表定義
  • db_name.MYD: 存儲數據
  • db_name.MYI: 存儲索引

MyISAM引擎不支持事務操作(當然,可以在service層根據自己的業務需求進行相應的控制),MyISQM存儲引擎適合在以下情況使用:

  1. 選擇密集型的表。MyISAM存儲引擎在篩選大量數據時非常迅速,這是它最突出的優點
  2. 插入密集型的表。MyISAM的兵法插入特性允許同時選擇和插入書數據。

3.MRG_MyISAM

MRG_MyISAM存儲引擎是一組MyISAM表的組合,也就是說它將MyISAM引擎的多個表聚合起來,但是它內部沒有數據,真正的數據依然在MyISAM引擎的表中。

例如:同一種類的數據根據時間分為多張表存儲,這時查詢就會比較麻煩,MRG_MyISAM引擎可以直接將多個表聚合成一個表統一查詢。

4.MEMORY

Memory存儲引擎的出發點是速度。為了得到最快的響應時間,採用的存儲介質是系統內存。雖然在內存中存儲表數據回提供很高的性能,但當mysqld守護進程崩潰時,所有的Memory數據都會丟失。另外,它要求存儲在數據表中的數據使用的是長度不變的格式,這意味著不能使用blob和text這樣的長度可變的數據類型,varchar是一種長度可變的類型,但因為它在MySQL內部當作長度固定不變的char類型,所以可以使用。

使用Mymory存儲引擎的場景:

  1. 目標數據較小,而且被經常頻繁的訪問。在內存中存放數據,過太大的數據可能造成內存溢出,可以通過參數max_heap_table_size控制Memory表的大小,限制表的最大大小。
  2. 如果數據是臨時的,而且要求必須立即可用,那麼可以放在內存中。
  3. 存儲在Memory表中的數據如果突然丟失,不會對服務器產生實質的負面影響。

5.CSV

csv存儲引擎是csv格式文件存儲數據。

  • 可以將csv文件作為MySQL的表使用,但是不支持索引,不支持分區。
  • 因為csv文件格式的原因,所有的字段必須非空。
  • 其中的每個數據行佔用一個文本行。

因為csv文件可以被Office等軟件直接編輯,可能會出現不規則的情況,若出現csv文件中內容損壞的情況,可以使用check table或repair table名零零檢查和修復。

6.ARCHIVE

archive是歸檔的意思,僅僅支持插入和查詢兩種操作,在MySQL5.5以後支持索引功能,有很好的壓縮機制,在記錄請求時進行實時壓縮,所以經常被當作倉庫來使用。適合存儲大量的獨立的作為歷史紀錄的數據,擁有很高的插入速度但是對查詢的支持比較差。

7.BLACKHOLE

黑洞存儲引擎,所有插入的數據不會保存,boackhole引擎表永遠保持為空。服務器會記錄下Blackhole表的日誌,所以可以用於複製數據到備份數據庫。

8.PERFORMANCE_SCHEMA

主要用於收集數據庫服務器的性能參數。MySQL用戶不能創建存儲引擎為PERFORMANCE_SCHEMA的表。

他提供了以下的功能:

  • 提供進程等待的詳細信息,包括鎖、互斥變量、文件信息。
  • 保存歷史的事件彙總信息,為Mysql服務器的性能做出詳細的判斷。
  • 對於新增和刪除監控時間點都非常容易,並可以隨意的改變Mysql服務器的監控週期

9.其他

當然還有其它一些存儲引擎,如FEDERATED、OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE等。

常用引擎對比

不同的存儲引擎有各自的特點,根據實際情況選擇合適的存儲引擎,其對比如下圖所示:

MySQL存儲引擎

MySQL操作

查看支持的存儲引擎:

show engines;

show engines\G;

查看mysql存儲引擎系統變量:

MySQL存儲引擎

修改數據庫引擎:

方式一:

修改配置文件my.ini,在[mysqld]後面添加default-storage-engine=InnoDB,重啟服務,將數據庫默認引擎修改為InnoDB。

MySQL存儲引擎

方式二:

在建表是指定存儲引擎:

MySQL存儲引擎

指定test表的存儲引擎為MyISAM。

方式三:

建表後更改:

MySQL存儲引擎

更改該表的存儲引擎為InnoDB。

查看錶使用的存儲引擎:

MySQL存儲引擎


該如何選擇合適的存儲引擎呢?提供以下幾個選擇的標準,實際情況靈活選擇:

  1. 是否需要支持事務
  2. 是否需要使用熱備
  3. 崩潰恢復,能否接收崩潰
  4. 是否需要外鍵支持
  5. 存儲的限制
  6. 對索引和緩存的支持


分享到:


相關文章: