一文徹底弄懂MySQL的各個儲存引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDB

lgx211發表於2024-10-25

MySQL 中的儲存引擎是其資料庫管理系統的核心模組,用於處理不同型別的資料儲存和檢索操作。每種儲存引擎都有自己的特點,適用於不同型別的應用場景。MySQL 最常用的儲存引擎包括 InnoDBMyISAMMemoryCSVArchiveMergeFederatedNDB 等。以下是對 MySQL 儲存引擎的詳細介紹。

1. InnoDB 儲存引擎

主要特點:

  • 事務支援:InnoDB 是 MySQL 中預設的儲存引擎,支援完整的 ACID 事務(Atomicity, Consistency, Isolation, Durability)特性。它還提供了事務的隔離級別,可以防止髒讀、不可重複讀、幻讀等問題。
  • 行級鎖定:InnoDB 使用行級鎖定(Row-level Locking),這使得它非常適合高併發的寫操作,鎖衝突的機率較小。
  • 外來鍵支援:InnoDB 支援外來鍵約束,因此可以在表與表之間定義資料的依賴關係,並自動維護參照完整性。
  • 崩潰恢復:InnoDB 透過使用 重做日誌(Redo Logs)撤銷日誌(Undo Logs) 來保證在系統崩潰時的資料恢復能力。
  • 聚簇索引:InnoDB 使用聚簇索引(Clustered Index),主鍵索引和資料儲存在一起。每個表必須有一個主鍵,如果沒有定義主鍵,InnoDB 會自動生成一個隱藏的主鍵。

適用場景:

InnoDB 非常適合處理需要高併發的事務系統,例如:

  • 銀行交易系統:涉及到大量的插入、更新操作,並且需要保證事務的完整性和隔離性。
  • 電子商務平臺:需要頻繁的訂單插入和庫存更新,並保證資料一致性。

工作機制(底層實現):

  • 資料儲存結構:InnoDB 將表儲存在一個邏輯的表空間中,預設情況下使用共享表空間 ibdata 檔案,也可以每個表單獨儲存在自己的 .ibd 檔案中。
  • 緩衝池(Buffer Pool):InnoDB 透過快取資料頁的方式,減少磁碟 I/O 操作。修改操作首先會被寫入緩衝池,隨後非同步地重新整理到磁碟。
  • 雙寫緩衝(Doublewrite Buffer):為了防止在崩潰或斷電時資料部分寫入磁碟導致的損壞,InnoDB 將資料頁寫入兩次,確保資料完整。

2. MyISAM 儲存引擎

主要特點:

  • 不支援事務:MyISAM 不支援事務和外來鍵,因此不能保證資料的完整性和一致性。
  • 表級鎖定:MyISAM 使用表級鎖定(Table-level Locking),對於讀操作鎖定整個表,寫操作也是如此。這使得 MyISAM 的併發效能較差,尤其是在頻繁寫入的場景。
  • 全文索引支援:MyISAM 支援全文索引(Full-text Index),可以用於高效的全文搜尋操作。
  • 較小的儲存空間:MyISAM 的儲存格式緊湊,對於儲存靜態資料或日誌資料有一定的優勢。
  • 速度快:由於其不需要事務控制、外來鍵支援等功能,MyISAM 在只讀或讀多寫少的場景下效能非常好。

適用場景:

  • 只讀資料庫:用於靜態資料儲存,且更新頻率低的場景。例如,資料倉儲日誌儲存系統
  • 全文搜尋:需要對文字進行快速全文搜尋的場景。

工作機制(底層實現):

  • 資料和索引分離儲存:MyISAM 將資料儲存在 .MYD 檔案中,索引儲存在 .MYI 檔案中。
  • 表鎖機制:對於 MyISAM,讀取操作可以併發進行,但一旦有寫操作,整個表會被鎖定。寫入時會阻塞所有其他的讀操作。
  • 不支援崩潰恢復:與 InnoDB 不同,MyISAM 不支援崩潰恢復,一旦系統崩潰可能導致資料丟失或不一致。

3. Memory 儲存引擎

主要特點:

  • 資料儲存在記憶體中:Memory 儲存引擎的資料是臨時儲存在記憶體中的,重啟資料庫或關閉會話後,所有資料都會丟失。
  • 表級鎖定:和 MyISAM 一樣,Memory 引擎使用表級鎖定。
  • 速度快:由於資料完全儲存在記憶體中,Memory 引擎的讀寫速度非常快。
  • 不支援 BLOB 和 TEXT 型別:由於記憶體的限制,Memory 引擎不支援大物件型別,如 BLOB 和 TEXT 型別。

適用場景:

  • 臨時資料處理:Memory 引擎適合用於臨時資料處理、快取資料等。例如,臨時表會話資料儲存
  • 快速查詢結果儲存:需要高效快速查詢但不需要持久化的場景。

工作機制(底層實現):

  • 記憶體儲存結構:Memory 引擎將資料儲存在記憶體中,使用雜湊索引(Hash Index),以提供更快速的查詢效能。
  • 資料丟失風險:由於資料儲存在記憶體中,一旦伺服器重啟或關閉,所有資料都會消失。

4. CSV 儲存引擎

主要特點:

  • 文字儲存:CSV 引擎將資料儲存為逗號分隔值的文字檔案,類似於傳統的 CSV 檔案。
  • 簡單結構:每張表的資料都會被儲存在一個 .csv 檔案中。
  • 不支援索引:CSV 引擎不支援索引,因此查詢效能較差。
  • 便於匯入和匯出:由於其儲存格式是標準的 CSV 檔案,便於與外部系統進行資料交換。

適用場景:

  • 資料匯入和匯出:在需要與其他系統交換資料時,CSV 儲存引擎是一個很好的選擇。
  • 臨時資料儲存:對於需要簡單格式且不需要索引的資料儲存場景,可以使用 CSV。

5. Archive 儲存引擎

主要特點:

  • 適合大規模資料儲存:Archive 儲存引擎專門設計用於高效地儲存大量的歷史資料或歸檔資料。
  • 支援插入和查詢:Archive 只支援插入操作和查詢操作,不支援更新和刪除操作。
  • 資料壓縮:Archive 引擎會將資料進行壓縮儲存,從而減少磁碟佔用。
  • 表級鎖定:Archive 使用表級鎖定。

適用場景:

  • 日誌系統:Archive 儲存引擎非常適合儲存日誌資料,歷史歸檔資料等,資料儲存空間有限的場景。

6. 其他儲存引擎

  • Merge:合併多個 MyISAM 表,可以將多個相同結構的 MyISAM 表合併為一個邏輯表,常用於分割槽資料管理。
  • Federated:用於分散式資料庫系統,可以在不同 MySQL 例項之間進行跨伺服器查詢。
  • NDB Cluster:用於 MySQL Cluster 配置,分散式、容錯的儲存引擎,常用於高可用系統。

總結

儲存引擎 主要特點 適用場景
InnoDB 支援事務、行級鎖定、外來鍵支援 高併發事務系統(如銀行、電子商務平臺)
MyISAM 不支援事務、表級鎖定、全文索引支援 靜態資料儲存、讀多寫少的系統
Memory 資料儲存在記憶體中,速度快 臨時資料處理、快取、會話管理
CSV 資料儲存為文字檔案,便於資料交換 資料匯入匯出場景
Archive 只支援插入和查詢,資料壓縮 日誌資料儲存、大規模歷史資料歸檔
Merge 合併多個 MyISAM 表 分割槽資料管理
Federated 分散式資料庫系統,跨伺服器查詢 需要與其他 MySQL 例項互動的系統

相關文章