當前位置:
首頁 > 知識 > MySQL數據引擎

MySQL數據引擎

MySQL中的數據用各種不同的技術存儲在文件(或者內存)中。這些技術中的每一種技術都使用不同的存儲機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。通過選擇不同的技術,你能夠獲得額外的速度或者功能,從而改善你的應用的整體功能。這些不同的技術以及配套的相關功能在mysql中被稱作存儲引擎(也稱作表類型),MySql默認配置了許多不同的存儲引擎,可以預先設置或者在MySql伺服器中啟用,鍵入show engines查看資料庫支持的引擎。

MySQL數據引擎

InnoDB:Innodb引擎提供了對資料庫ACID事務的支持,所謂事務處理,就是原子性操作。打個比方,支持事務處理的Innodb表。你執行一個insert語句,插入後就要執行一個update語句來修改其他相關的數據。假設一種特殊情況突然發生,insert成功了但是update沒有成功,這時候數據會混亂。如果使用了事務處理,insert和update都放入到事務中去執行,這個時候,只有當insert和update兩條語句都執行生成的時候才會將數據更新、寫入到中,如果其中任何一條語句失敗,那麼就會回滾為初始狀態,不執行寫入。這樣就保證了insert和update肯定是一同執行的。除此之外它還提供了行級鎖和外鍵的約束。鎖行,就是說,你執行update語句是,只會將這一條記錄進行鎖定,只有針對這條記錄的其他寫入、更新操作會被阻塞並等待這條update語句執行完畢後再執行,針對其他記錄的寫入操作不會有影響。它的設計的目標就是處理大數據容量的資料庫系統。它本身實際上是基於Mysql後台的完整的系統。Mysql運行的時候,Innodb會在內存中建立緩衝池,用於緩衝數據和索引。但是,該引擎是不支持全文搜索的。同時,啟動也比較的慢,它是不會保存表的行數的。當進行Select count(*) from table指令的時候,需要進行掃描全表。所以當需要使用資料庫的事務時,該引擎就是首選。由於鎖的粒度小,寫操作是不會鎖定全表的,所以在並發度較高的場景下使用它會提升效率的。

MyISAM:不提供事務的支持,也不支持行級鎖和外鍵。因此當執行Insert插入和Update更新語句時,即執行寫操作的時候需要鎖定這個表。所以會導致效率會降低。不過和Innodb不同的是,MyIASM引擎是保存了表的行數,於是當進行Select count(*) from table語句時,可以直接的讀取已經保存的值而不需要進行掃描全表。所以,如果表的讀操作遠遠多於寫操作時,並且不需要事務的支持的。可以將MyIASM作為資料庫引擎的首先 。對於MyIASM引擎來說,B+樹的數據結構中存儲的內容實際上是實際數據的地址值。也就是說它的索引和實際數據是分開的,只不過使用索引指向了實際數據。這種索引的模式被稱為非聚集索引。而Innodb引擎的索引的數據結構也是B+樹,只不過數據結構中存儲的都是實際的數據,這種索引有被稱為聚集索引。

Memory:Memory存儲引擎的出發點是速度。為得到最快的響應時間,採用的邏輯存儲介質是系統內存。雖然在內存中存儲表數據確實會提供很高的性能,但當mysqld守護進程崩潰時,所有的Memory數據都會丟失。獲得速度的同時也帶來了一些缺陷。它要求存儲在Memory數據表裡的數據使用的是長度不變的格式,這意味著不能使用BLOB和TEXT這樣的長度可變的數據類型,VARCHAR是一種長度可變的類型,但因為它在MySQL內部當做長度固定不變的CHAR類型,所以可以使用。

MySQL數據引擎

參考如下Memory引擎的使用場景及特點:

1能像會話(Session)或緩存(Caching)一樣方便操作和管理。

2充分發揮內存引擎的特點:高速度,低延遲。

3隻讀或讀為主的訪問模式(不適合頻繁寫)。

4但是內存表的性能受制於單線程的執行效率和寫操作時的表鎖開銷,這就限制了內存表高負載時的擴展性,特別是混合寫操作的並發處理。此外,內存表中的數 據在伺服器重啟後會丟失。

BlACKHOLE:這個存儲引擎似乎看起來沒什麼用處,因為它不允許任何數據的存儲或者查詢。因此BLACKHOLE 通常被用來測試資料庫的結構、索引和擦查詢。你仍然可以使用 INSERTS 命令來插入,只不過所有的數據都是void

CSV:從MySQL4.1.4開始添加的存儲引擎,以逗號分隔的字元串存儲數據。因此這個存儲引擎不適合大規模的數據存儲或者需要索引的數據表等場景。這個存儲引擎適合將數據轉成spreadsheet 文件

ARCHIVE:從MySQL 4.1.3 開始添加的存儲引擎,它經常被用來存儲大規模數據(無需索引)。這個存儲引擎只支持 INSERT 和 SELECT操作,而且所有的信息都是被壓縮過的。這些特性讓ARCHIVE很適合用來存儲日誌、交易記錄、賬戶等。不過需要注意的是,在讀取數據的時候,整個表都需要在數據返回之前解壓並讀取。因此這個存儲引擎最適合使用頻率較低的場景。

FEDERATED:Federated存儲引擎是訪問MySQL伺服器的一個代理,儘管該引擎看起來提供了一個很好的跨伺服器的靈活性,但是經常帶來問題,默認是禁用的。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 PHP愛好者 的精彩文章:

深入剖析nginx時間緩存
每個程序員書櫃必備的編程書籍
可擴展系統的9個性能問題
快速成長期的雲原生應用架構實踐

TAG:PHP愛好者 |

您可能感興趣

MySQL 導出數據
MySQL數據目錄
Python寫入數據到MySQL
MySQL資料庫之數據類型
IBM更新SDS,數據保護和存儲產品,連通NAS, 雲與NVMe over Fabric
PowerBI從SCCM資料庫中分析數據和KPI展現
Hooking Chrome瀏覽器的SSL函數來讀取SSL通信數據
數據正翹首以待:NVMe SSD 為 OLTP 平台帶來更多優勢
Net Core SDK全球使用數據解析
ASP.NET Web Forms 數據綁定
MySQL官方Docker鏡像的數據存儲問題
春季賽數據榜,JackeyLove這項數據碾壓UZI和SMLZ
數據中心管理:DCIM Out 了,DMaaS 上位!
TCGA資料庫mRNA&lncRNA數據提取
GTAOL Mottcvl美女捏臉數據一覽
IBM發布PAIRS Geoscope專用於搜索地理空間大數據
西部數據發布Black 3D NVMe SSD新品 最大容量1TB
蘋果放開USB Type-C轉Lightning介面數據線MFi授權
數據挖掘之三——Logistic回歸&LMT
西部數據重磅推出Black 3D NVMe SSD 進一步提升用戶遊戲體驗