1. 程式人生 > >MySql 儲存引擎的選取

MySql 儲存引擎的選取

儲存引擎是為不同的表型別處理 SQL 操作的 MySql 元件。InnoDB 是預設的、最通用的儲存引擎,也是官方推薦使用的儲存引擎,除非一些特定案例。MySql 5.6 中的 CREATE TABLE 語句建立的表的儲存引擎預設就是 InnoDB。

MySql 伺服器使用的是一個可插拔儲存引擎架構,它能夠在執行的時候動態載入或者解除安裝這些儲存引擎。

可以使用 SHOW ENGINES 語句來檢視你的 MySql 伺服器所支援的儲存引擎。Support 列裡的值指示出是否一個引擎可以被你使用:YES、NO 以及 DEFAULT 值分別表示某儲存引擎是可用、不可用、可用並且是當前預設的儲存引擎。

 

MySql 5.6 所支援的儲存引擎

  • InnoDB:MySql 5.6 版本預設的儲存引擎。InnoDB 是一個事務安全的儲存引擎,它具備提交、回滾以及崩潰恢復的功能以保護使用者資料。InnoDB 的行級別鎖定以及 Oracle 風格的一致性無鎖讀提升了它的多使用者併發數以及效能。InnoDB 將使用者資料儲存在聚集索引中以減少基於主鍵的普通查詢所帶來的 I/O 開銷。為了保證資料的完整性,InnoDB 還支援外來鍵約束。
  • MyISAM:表級別的鎖定限制了它在讀寫負載方面的效能,因此它經常應用於只讀或者以讀為主的資料場景。
  • Memory:在記憶體中儲存所有資料,應用於對非關鍵資料由快速查詢的場景。Memory 引擎曾被稱為 HEAP 引擎。它的使用案例正在減少:InnoDB 的記憶體緩衝區為將大部分或全部資料保持在記憶體提供了一個通用並耐用的方式,NDBCLUSTER 為大分散式資料集提供了快速的 key-value 訪問。
  • CSV:它的表真的是以逗號分隔的文字檔案。CSV 表允許你以 CSV 格式匯入匯出資料,以相同的讀和寫的格式和指令碼和應用互動資料。由於 CSV 表沒有索引,你最好是在普通操作中將資料放在 InnoDB 表裡,只有在匯入或匯出階段使用一下 CSV 表。
  • Archive:黑洞儲存引擎,類似於 Unix 的 /dev/null,Archive 只接收但卻並不儲存資料。對這種引擎的表的查詢常常返回一個空集。這種表可以應用於 DML 語句需要傳送到從伺服器,但主伺服器並不會保留這種資料的備份的主從配置中。
  • NDB:(又名 NDBCLUSTER)——這種叢集資料引擎尤其適合於需要最高程度的正常執行時間和可用性的應用。注意:NDB 儲存引擎在標準 MySql 5.6 版本里並不被支援。目前能夠支援 MySql 叢集的版本有:基於 MySql 5.1 的 MySQL Cluster NDB 7.1;基於 MySql 5.5 的 MySQL Cluster NDB 7.2;基於 MySql 5.6 的 MySQL Cluster NDB 7.3。同樣基於 MySql 5.6 的 MySQL Cluster NDB 7.4 目前正處於研發階段。
  • Merge:允許 MySql DBA 或開發者將一系列相同的 MyISAM 表進行分組,並把它們作為一個物件進行引用。適用於超大規模資料場景,如資料倉庫。
  • Federated:提供了從多個物理機上聯接不同的 MySql 伺服器來建立一個邏輯資料庫的能力。適用於分散式或者資料市場的場景。
  • Example:這種儲存引擎用以儲存闡明如何開始寫新的儲存引擎的 MySql 原始碼的例子。它主要針對於有興趣的開發人員。這種儲存引擎就是一個啥事也不做的 "存根"。你可以使用這種引擎建立表,但是你無法向其儲存任何資料,也無法從它們檢索任何索引。

對於整臺伺服器或整個 schema 你並不受限於使用同一種儲存引擎。你可以為所有表定義儲存引擎。比如,一個應用可能以 InnoDB 表為主,輔以一個 CSV 表用以匯出資料到電子表格,少許 MEMORY 表用以臨時工作空間。

 

儲存引擎的選擇

MySql 提供的這些儲存引擎為不同的應用案例進行設計。下表為 MySql 提供的儲存引擎做了一個概述:

儲存引擎特性總結
特性 MyISAM Memory InnoDB Archive NDB
儲存上限 NDB RAM 64TB 384EB
事務支援
鎖粒度
MVCC
地理空間資料型別支援
地理空間索引支援
B-tree 索引
T-tree 索引
Hash 索引
全文檢索索引
聚集索引
資料快取 N/A
索引快取 N/A
資料壓縮
資料加密
支援資料庫叢集
支援主從
支援外來鍵
備份/時間點恢復
支援查詢快取
更新資料字典的統計

 

 

注意

  • InnoDB 在 MySQL 5.7.5 及以後的版本才支援地理空間索引
  • InnoDB 通過其自適應雜湊索引的特性內建進行雜湊索引優化
  • InnoDB 在 MySql 5.6.4 及以後版本才能支援 FULLTEXT 索引
  • MyISAM 只能在行壓縮格式時支援資料壓縮。使用了行壓縮的 MyISAM 表只讀
  • InnoDB 表壓縮要求 InnoDB Barracuda 檔案格式
  • MySql 的資料加密是由伺服器的加密函式提供,並非儲存引擎
  • 主從支援、備份/時間點恢復等功能也是由伺服器提供,而並非儲存引擎

原文連結:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html