MySQL中表的存儲引擎如何選擇

MySQL默認支持多種存儲引擎

🍐多種存儲引擎,以適應於不一樣領域的數據庫應用須要,用戶能夠選擇不一樣的存儲引擎提升應用的效率,提供靈活的存儲,用戶甚至能夠按照本身的須要定製和使用本身的存儲引擎。數據庫

🍐MySQL5.0支持的存儲引擎包括MyISAM、InnoDB、MEMORY、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED,其中InnoDB和BDBD提供事務安全表,其餘存儲引擎都市非事務安全表。緩存

🍐建立新表時若是不指定存儲引擎,系統會使用默認存儲引擎。MySQL5.5以前的默認存儲引擎是MYISAM,5.5以後改成InnoDB。(個人是8.0版,以下圖)安全

創表時對存儲引擎的操做

🍐建立表ai(存儲引擎爲MYISAM),表country(存儲引擎爲InnoDB):併發

 🍐使用ALTER TABLE語句,將一個已經存在的表修改爲其餘的存儲引擎。下面的例子介紹瞭如何將表ai從MyISAM存儲引擎修改到InnoDB存儲引擎.性能

 

 

 嗯哼,怎麼肥四啊???spa

 

 

 嗯哼,怎麼肥四啊???好迷,暫未解決插件

 

 經常使用存儲引擎的特性。

 

 

 

🎂MyISAM

🍐不支持事務,也不支持外鍵。對象

🍐優點訪問速度快,對事務完整性沒有要求,以SELECT、INSERT爲主的應用基本用這個引擎來建立。blog

🍐支持三種不一樣的存儲格式分別是:排序

  • 靜態表
  • 動態表(動態表中包含變長字段,記錄不是固定長度的,這樣存儲的優勢是佔用的空間相對較少,可是頻繁地更新和刪除記錄會產生碎片,須要按期執行OPTIMIZE TABLE語句或myisamchk-r命令來改善性能,而且在出現故障時恢復相對比較困難。)
  • 壓縮表(空間小)
  • 注:靜態表是默認的存儲格式,存儲迅速,容易緩存,佔空間大。數據存儲時混按照列寬補全空格,但在訪問時不會獲得後面這些空格。特別注意!!!

 

 

 

 

🎂InnoDB

🍐InooDB存儲引擎具備提交,回滾,和崩潰恢復能力的事務安全。

 

  • 自動增加列:1.自動增加列能夠手動插入,可是若是插入的值爲空或者爲0,那麼實際插入的爲自動增加以後的值。2.對於InnoDB表,自動增加列必須是索引。若是是組合索引,也必須是組合索引的第一列,可是對於 MyISAM 表,自動增加列能夠是組合索引的其餘列,這樣插入記錄後,自動增加列是按照組合索引的前面幾列進行排序後遞增的。
  • 1.手動插入示例
  • 2
  •  

  • 外鍵約束(MySQL支持外鍵的存儲引擎只有InnoDB,在建立外鍵的時候,要求父表必須有對應的索引,子表在建立外鍵的時候也會自動建立對應的索引)
  • 存儲方式1.共享表空間存儲 2.多表空間存儲。(多表空間的表的參數生效後,只對新建的表生效)。

🎂MERGE

MEMORY類型的表訪問很是地快,由於它的數據是放在內存中的,而且默認使用HASH索引,可是一旦服務關閉,表中的數據就會丟失掉。

MEMORY 類型的存儲引擎主要用於那些內容變化不頻繁的代碼表,或者做爲統計操做的中間結果表,便於高效地對中間結果進行分析並獲得最終的統計結果。對存儲引擎爲MEMORY的表進行更新操做要謹慎,由於數據並無實際寫入到磁盤中,因此必定要對下次從新啓動服務後如何得到這些修改後的數據有所考慮

 如何選擇合適的存儲引擎

 🎂MyISAM:默認的MySQL插件式存儲引擎。若是應用是以讀操做和插入操做爲主,只有不多的更新和刪除操做,而且對事務的完整性、併發性要求不是很高,那麼選擇這個存儲引擎是很是適合的。MyISAM是在Web、數據倉儲和其餘應用環境下最常使用的存儲引擎之一。
🎂InnoDB:用於事務處理應用程序,支持外鍵。若是應用對事務的完整性有比較高的要求,在併發條件下要求數據的一致性,數據操做除了插入和查詢之外,還包括不少的更新、刪除操做,那麼InnoDB存儲引擎應該是比較合適的選擇。InnoDB存儲引擎除了有效地下降因爲刪除和更新致使的鎖定,還能夠確保事務的完整提交(Commit)和回滾(Rollback),對於相似計費系統或者財務系統等對數據準確性要求比較高的系統,InnoDB都是合適的選擇。
🎂MEMORY:將全部數據保存在 RAM 中,在須要快速定位記錄和其餘相似數據的環境下,可提供極快的訪問。MEMORY 的缺陷是對錶的大小有限制,太大的表沒法緩存在內存中,其次是要確保表的數據能夠恢復,數據庫異常終止後表中的數據是能夠恢復的。MEMORY表一般用於更新不太頻繁的小表,用以快速獲得訪問結果。
🎂MERGE:用於將一系列等同的MyISAM表以邏輯方式組合在一塊兒,並做爲一個對象引用它們。MERGE表的優勢在於能夠突破對單個MyISAM表大小的限制,而且經過將不一樣的表分佈在多個磁盤上,能夠有效地改善MERGE表的訪問效率。這對於諸如數據倉儲等VLDB環境十分適合。

相關文章
相關標籤/搜索