個人學習過程中總結,如有不同見解望交流。
儲存引擎是什麼?:mysql的儲存引擎是為了解決不同業務的需求所提供的多種資料儲存方式的選擇。例如乙個業務的資料要求支援事務,這時候就要選擇可以支援事務的儲存引擎。
mysql中設定儲存引擎:例: create table table_name(column type) engine = innodb;
修改儲存引擎:例:alter table table_name engine = myisam;
mysql中常用的儲存引擎有:
1)***innodb:
- 特點:支援事務、外來鍵。表的行數不會事先儲存。 mysql的預設引擎
- 鎖:行級鎖(可能死鎖但並行效率高)
- 適用情況 :(1)要求事務(2)表的查詢和更新都非常頻繁(3)對錶的可靠性要求高
2)*myisam:
-特點 不支援事務、外來鍵。表在count()時行數事先儲存直接讀取。但在count()有where條件時和innodb相同。在儲存到本地時會儲存成3個檔案(.frm表的定義,.myd表的資料,.myi表的索引)
-鎖:表級鎖,concurrent_insert=0/1/2 新增並行鎖,效果分別是 不允許並行寫/只允許表中沒有空白時表尾並行插入/允許表尾並行插入 。讀時不允許寫操作,寫時也不允許讀,只能等待操作完成釋放鎖。並且在同時申請鎖時寫的優先度會高於讀,甚至後申請的寫會插隊到讀前。因此myisam不適合有大量讀和寫操作的情況,因為寫會占用太多時間。但可以通過引數來控制讀寫優先順序(也因此不會死鎖)
-適用情況:(1)做很多count 的計算;(2)插入不頻繁,查詢非常頻繁;(3)沒有事務。
3)merge:
-特點 merge是一組myisum表的組合,要求這些myisum的表結構完全相同。而且其增刪改查操作本質上是對myisum表的操作。在刪除merge表結構時,內部表的資料也不會發生變化
-適用情況:merge儲存引擎使用場景對於伺服器日誌這種資訊,一般常用的儲存策略是將資料分成很多表,每個名稱與特定時間端相關。
4)memory:
-特點:速度快。因為memery表是基於系統記憶體來執行的,因此故障時資料會全部丟失。且資料只能用定長的資料型別。
-適用情況:1.目標資料小且訪問非常頻繁、2.存放臨時資料且立即需要使用 3.
5)archive :
-特點:archive即歸檔的意思,具有壓縮機制,儲存資料量是最大的。但只支援插入和查詢且速度慢。(現在也有索引機制了,速度快了一些)
-適用情況:通常用來儲存日誌檔案或記錄等查詢不頻繁但量大、永續性高的資料。
如何選合適的儲存引擎?
選擇標準可以分為:
1、是否需要支援事務;
2、是否需要使用熱備;
3、崩潰恢復,能否接受崩潰;
4、是否需要外來鍵支援。
主要 參考:
MySQL各儲存引擎
mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。這些不同的技術以及配套的相關功能在mysql中被稱作儲存引擎 ...
MySQL各儲存引擎
mysql中的資料用各種不同的技術儲存在檔案 或者記憶體 中。這些技術中的每一種技術都使用不同的儲存機制 索引技巧 鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。這些不同的技術以及配套的相關功能在mysql中被稱作儲存引擎 ...
MySQL各儲存引擎比較
feature特性 myisam innodb bdb memory archive ndb storage limits儲存限制 no64tb noyes noyes transactions事務支援 commit,rollback,etc.vv locking granularity鎖級別 ta...