Mysql存儲引擎,你瞭解幾個?

七枷社 2024-04-11 18:48 14次浏览 0 条评论 taohigo.com

引言

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引擎等。每個引擎都有其適用的場景和優化策略,大傢線上實際使用的時候根據項目需求評估選擇合適的引擎。