MySQL中的數據用各種不同的技術存儲在文件(或者內存)中。這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平并且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。
**存儲引擎主要有**:
1. MyIsam ,
2. Mrg\_Myisam,
3. Memory,
4. Blackhole,
5. CSV,
6. Performance\_Schema,
7. Archive,
8. Federated ,
9. InnoDB
sql: `show engines\G;`
---
1. MyIsam
MyIsam 存儲引擎獨立于操作系統,也就是可以在windows上使用,也可以比較簡單的將數據轉移到linux操作系統上去。這種存儲引擎在創建表的時候,會創建三個文件,一個是.frm文件用于存儲表的定義,一個是.MYD文件用于存儲表的數據,另一個是.MYI文件,存儲的是索引。操作系統對大文件的操作是比較慢的,這樣將表分為三個文件,那么.MYD這個文件單獨來存放數據自然可以優化數據庫的查詢等操作。
1. ?不支持事務,但是并不代表著有事務操作的項目不能用MyIsam存儲引擎,可以在service層進行根據自己的業務需求進行相應的控制。
2. ?不支持外鍵。
3. ?查詢速度很快。如果數據庫insert和update的操作比較多的話采用表鎖效率低(建議使用innodb)。
4. ?對表進行加鎖。
2.?Mrg_Myisam
Merge存儲引擎,是一組MyIsam的組合,也就是說,他將MyIsam引擎的多個表聚合起來,但是他的內部沒有數據,真正的數據依然是MyIsam引擎的表中,但是可以直接進行查詢、刪除更新等操作。
比如:我們可能會遇到這樣的問題,同一種類的數據會根據數據的時間分為多個表,如果這時候進行查詢的話,就會比較麻煩,Merge可以直接將多個表聚合成一個表統一查詢,然后再刪除Merge表(刪除的是定義),原來的數據不會影響。
3. Memory
Memory采用的邏輯介質是內存,響應速度應該是很快的,但是當mysqld守護進程崩潰的時候數據會丟失,另外,要求存儲的數據是數據長度不變的格式,比如,Blob和Text類型的數據不可用(長度不固定的)。
使用Memory存儲引擎情況:
? 1. 目標數據比較小,而且非常頻繁的進行訪問,在內存中存放數據,如果太大的數據會造成內存溢出。可以通過參數max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。
? 2. 如果數據是臨時的,而且必須立即可用得到,那么就可以放在內存中。
? 3. 存儲在Memory表中的數據如果突然間丟失的話也沒有太大的關系。
? 【注】 Memory同時支持散列索引和B樹索引,B樹索引可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數據挖掘,散列索引相等的比較快但是對于范圍的比較慢很多。
4.?Blackhole
“黑洞”存儲引擎,他會丟棄所有的插入的數據,服務器會記錄下Blackhole表的日志,所以可以用于復制數據到備份數據庫。看其他的一些資料說:可以用來充當dummy master,利用blackHole充當一個“dummy master”來減輕master的負載,對于master來說“dummy master” 還是一個slave的角色,還有充當日志服務器等等。
5. CSV
可以將scv文件作為MySql的表來使用,但是不支持索引。CSV引擎表所有的字段都必須為非空的,創建的表有兩個一個是CSV文件和CSM文件。
6.?Performance_Schema
MySQL5.5以后新增了一個存儲引擎,就是Performance_Schema,他主要是用來收集數據庫服務器的性能參數。MySQL用戶不能創建存儲該類型的表。
他提供了以下的功能:
1. 提供進程等待的詳細信息,包括鎖、互斥變量、文件信息。
2. 保存歷史的事件匯總信息,為Mysql服務器的性能做出詳細的判斷。
3. 對于新增和刪除監控時間點都非常容易,并可以隨意的改變Mysql服務器的監控周期
需要在配置文件my.cnf中進行配置才能開啟。
7. ?Archive
archive是歸檔的意思,僅僅支持插入和查詢兩種功能,在MySQL5.5以后支持索引功能,他擁有很好的壓縮機制,使用zlib壓縮庫,在記錄請求的時候實時的進行壓縮,經常被用來作為倉庫使用。適合存儲大量的獨立的作為歷史記錄的數據。擁有很高的插入速度但是對查詢的支持較差。
8. Federated
Federated存儲引擎是訪問MySQL服務器的一個代理,盡管該引擎看起來提供了一個很好的跨服務器的靈活性,但是經常帶來問題,默認是禁用的。
9. InnoDB
InnoDB是一個事務型的存儲引擎,有行級鎖定和外鍵約束,適用于以下的場合:
1. 更新多的表,適合處理多重并發的更新請求。
2. 支持事務。
3. 可以從災難中恢復(通過bin-log日志等)。
4. 外鍵約束。只有他支持外鍵。
5. 支持自動增加列屬性auto_increment。
- 序言
- 從業感悟
- 常用名詞
- HTML
- JS
- ES6新特性
- jquery和vue對比
- 徹底理解this
- JQuery添加自定義函數
- js的實現
- 原始值和引用值
- MYSQL
- 簡介
- 術語
- 特點
- 范式
- 數據類型1
- 數據類型2
- 編碼
- 權限管理
- 事務
- mvvc
- 引擎
- MyISAM與InnoDB區別
- 索引類型
- 鎖
- 死鎖
- 分層架構
- 執行計劃
- join原理
- 高可用
- 日志類型
- 分庫分表
- 中間件
- 服務器
- 操作系統
- 信號量 鎖 隊列
- PHP
- composer加載原理
- composer基礎知識
- 自動加載函數
- composer加載代碼
- composer 自動加載
- 內存管理
- PHP執行流程
- cgi,fastCgi,php-fpm
- HTTP
- 錯誤碼
- 跨域請求
- 面試
- 安全
- HTTP劫持
- 設計模式
- 如何正確的使用設計模式
- 單例模式
- 原型模式
- 簡單工廠模式
- 工廠方法模式
- 抽象工廠模式
- 建造者模式
- 設計原則
- 算法
- PHP短標簽