引言
MySQL是一個流行的關系型數據庫管理系統(RDBMS),它支持多種不同的數據庫引擎。數據庫引擎指用於存儲、管理和檢索數據的核心組件,它們通常直接影響著數據庫的性能、可靠性和功能,接下來小編介紹下一些常見的MySQL數據庫引擎。
存儲引擎
InnoDB引擎
InnoDB 是MySQL默認的事務性數據庫引擎,底層存儲結構為B+樹, B樹的每個節點對應innodb的一個page, page大小是固定的,一般設為 16k。其中非葉子節點隻有鍵值,葉子節點包含完成數據。
適用場景:
- 經常更新的表,適合處理多重並發的更新請求。
- 支持事務。
- 可以從災難中恢復(通過 bin-log 日志等)。
- 外鍵約束。隻有他支持外鍵。
- 支持自動增加列屬性 auto_increment。
MyISAM引擎
MyIASM 沒有提供對數據庫事務的支持,也不支持行級鎖和外鍵, 因此當 INSERT(插入)或 UPDATE(更新)數據時即寫操作需要鎖定整個表,效率會低一些。
MyIASM 執行讀取操作的速度很快,而且不占用大量的內存和存儲資源。在設計之初就預想數據組織成有固定長度的記錄,按順序存儲的。
適用場景:
- 不支持事務。
- 它對於讀密集型應用程序具有較好的性能。
- 它適用於隻讀或很少更新的應用程序,例如博客、新聞網站等。
Memory引擎
Memory(也叫 HEAP)堆內存:使用存在內存中的內容來創建表,每個 MEMORY 表實際對應一個磁盤文件。 MEMORY 類型的表訪問非常得快,因為它的數據是放在內存中的,並且默認使用 HASH 索引。但是一旦服務關閉,表中的數據就會丟失掉。 Memory 同時支持散列索引和 B 樹索引, B樹索引可以使用部分查詢和通配查詢,也可以使用<,>和>=等操作符方便數據挖掘,散列索引相等的比較快但是對於范圍的比較慢很多。
特點:
- Memory引擎將表存儲在內存中,提供瞭非常高的讀寫性能。
- Memory引擎不支持事務,並且在數據庫重啟時會丟失數據。
- 它適用於需要快速讀寫操作的臨時數據或緩存。
TokuDB
TokuDB 底層存儲結構為 Fractal Tree,Fractal Tree 的結構與 B+樹有些類似, 在 Fractal Tree 中, 每一個 child 指針除瞭需要指向一個 child 節點外,還會帶有一個 Message Buffer ,這個Message Buffer 是一個 FIFO 的隊列,用來緩存更新操作。
例如,一次插入操作隻需要落在某節點的 Message Buffer 就可以馬上返回瞭,並不需要搜索到葉 子節點。這些緩存的更新會在查詢時或後臺異步合並應用到對應的節點中。
TokuDB 在線添加索引,不影響讀寫操作, 非常快的寫入性能, Fractal-tree 在事務實現上有優勢。他主要適用於訪問頻率不高的數據或歷史數據歸檔。
Archive引擎
- Archive引擎專門用於存儲和歸檔大量歷史數據。
- 它采用高度壓縮的存儲格式,在存儲空間和性能之間取得瞭平衡。
- Archive引擎適用於隻需偶爾查詢的大型歷史數據集。
引擎的選擇
功能 | MyISAM | Memory | InnoDB | Archive |
---|---|---|---|---|
存儲限制 | 265TB | RAM | 65TB | Node |
支持事務 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持數索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持數據緩存 | No | N/A | Yes | No |
支持外鍵 | No | No | Yes | No |
結論
除瞭上述幾個引擎,MySQL還支持其他一些引擎,如CSV引擎、Blackhole引擎等。每個引擎都有其適用的場景和優化策略,大傢線上實際使用的時候根據項目需求評估選擇合適的引擎。
-
扫码下载安卓APP
-
微信扫一扫关注我们微信扫一扫打开小程序手Q扫一扫打开小程序
-
返回顶部