概述
存儲引擎是什麼?
MySQL中的數據用各種不同的技術存儲在文件中,這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,額能夠獲得額外的速度或功能,改善應用功能。
存儲引擎
1.InnoDB
InnoDB是一個健壯的事務性存儲引擎,有行級鎖定和外鍵約束,適用於以下場合:
- 更新密集的表。InnoDB存儲引擎適合處理多重併發的更新請求。
- 事務。InnoDB存儲引擎是支持事務的標準MySQL存儲引擎。
- 自動災難恢復。與其他存儲引擎不同,InnoDB表能夠自動從災難中恢復。
- 外鍵約束。MYSQL支持外鍵的存儲引擎只用InnoDB。
- 支持自動增長列auto_increment屬性。
另外,從MySQL5.7開始InnoDB就成為默認的存儲引擎。
2.MyISAM
MyISAM表是獨立於操作系統的,這說明可以輕鬆的將其從Windows服務器移植到Linux服務器。每當簡歷一個MyISAM引擎的表時,就會創建三個文件,文件名是表名,三個文件如下:
- db_name.frm: 存儲表定義
- db_name.MYD: 存儲數據
- db_name.MYI: 存儲索引
MyISAM引擎不支持事務操作(當然,可以在service層根據自己的業務需求進行相應的控制),MyISQM存儲引擎適合在以下情況使用:
- 選擇密集型的表。MyISAM存儲引擎在篩選大量數據時非常迅速,這是它最突出的優點
- 插入密集型的表。MyISAM的兵法插入特性允許同時選擇和插入書數據。
3.MRG_MyISAM
MRG_MyISAM存儲引擎是一組MyISAM表的組合,也就是說它將MyISAM引擎的多個表聚合起來,但是它內部沒有數據,真正的數據依然在MyISAM引擎的表中。
例如:同一種類的數據根據時間分為多張表存儲,這時查詢就會比較麻煩,MRG_MyISAM引擎可以直接將多個表聚合成一個表統一查詢。
4.MEMORY
Memory存儲引擎的出發點是速度。為了得到最快的響應時間,採用的存儲介質是系統內存。雖然在內存中存儲表數據回提供很高的性能,但當mysqld守護進程崩潰時,所有的Memory數據都會丟失。另外,它要求存儲在數據表中的數據使用的是長度不變的格式,這意味著不能使用blob和text這樣的長度可變的數據類型,varchar是一種長度可變的類型,但因為它在MySQL內部當作長度固定不變的char類型,所以可以使用。
使用Mymory存儲引擎的場景:
- 目標數據較小,而且被經常頻繁的訪問。在內存中存放數據,過太大的數據可能造成內存溢出,可以通過參數max_heap_table_size控制Memory表的大小,限制表的最大大小。
- 如果數據是臨時的,而且要求必須立即可用,那麼可以放在內存中。
- 存儲在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操作
查看支持的存儲引擎:
show engines;
show engines\G;
查看mysql存儲引擎系統變量:
修改數據庫引擎:
方式一:
修改配置文件my.ini,在[mysqld]後面添加default-storage-engine=InnoDB,重啟服務,將數據庫默認引擎修改為InnoDB。
方式二:
在建表是指定存儲引擎:
指定test表的存儲引擎為MyISAM。
方式三:
建表後更改:
更改該表的存儲引擎為InnoDB。
查看錶使用的存儲引擎:
該如何選擇合適的存儲引擎呢?提供以下幾個選擇的標準,實際情況靈活選擇:
- 是否需要支持事務
- 是否需要使用熱備
- 崩潰恢復,能否接收崩潰
- 是否需要外鍵支持
- 存儲的限制
- 對索引和緩存的支持
閱讀更多 學習編程 的文章