MySQL存儲引擎

概述

存儲引擎是什麼?mysql

MySQL中的數據用各類不一樣的技術存儲在文件中,這些技術中的每一種技術都使用不一樣的存儲機制、索引技巧、鎖定水平而且最終提供普遍的不一樣的功能和能力。經過選擇不一樣的技術,額可以得到額外的速度或功能,改善應用功能。sql

存儲引擎

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引擎的表中。blog

例如:同一種類的數據根據時間分爲多張表存儲,這時查詢就會比較麻煩,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. 對索引和緩存的支持
相關文章
相關標籤/搜索