譯-存儲引擎的選擇

Chapter 16 Alternative Storage Engines
轉自個人github,github優先更新~歡迎star~html

存儲引擎是MySQL的組件,是用來爲不一樣類型的表處理SQL操做的。InnoDB是目前默認的也是最通用的存儲引擎。Oracle也建議使用它
除了專門的使用案例。在MySQL中5.7 CREATE TABLE語句默認建立InnoDB表。mysql

MySQL服務器採用了插件式存儲引擎架構,是爲了確保存儲引擎能夠從正在運行的MySQL服務器上被裝入和卸載。git

爲了肯定你的機器支持哪一種存儲引擎,使用 SHOW ENGINES 語句。在支持列中的值表示引擎是否可使用。
值爲YES,NO,或DEFAULT分別表示一個引擎是可用的,不可用,或可用與目前設置爲默認存儲引擎。github

使用此命令前先登錄mysql;如下是個人機器顯示結果,非官方sql

mysql> SHOW ENGINES\G
*************************** 1. row ***************************
      Engine: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: NULL
9 rows in set (0.00 sec)

本章介紹了專用的MySQL存儲引擎的使用案例。它不包括默認的InnoDB存儲引擎或覆蓋在第15章NDB存儲引擎,
InnoDB存儲引擎,以及第19章,MySQL集羣7.5 NDB。對於高級用戶,
本章還包含了插件式存儲引擎架構的說明(見第16.11,「MySQL存儲引擎架構概述」)。數據庫

有關商業MySQL服務器的二進制文件提供存儲引擎的支持信息,請參閱MySQL企業版服務器5.7,在MySQL的網站。
可用的存儲引擎可能取決於其企業服務器版所使用。緩存

爲了解答常見關於MySQL存儲引擎的問題,請參見A.2「的MySQL 5.7 FAQ:存儲引擎」。安全

MySQL的5.7支持的存儲引擎服務器

  • InnoDB:MySQL 5.7默認的存儲引擎。InnoDB的是MySQL事務安全(ACID兼容)存儲引擎,具備提交,回滾和崩潰恢復功能來保護用戶數據。
    InnoDB的行級鎖(而不是升級到粗粒度鎖)和Oracle風格一致的非鎖定讀取增長了多用戶的併發性和性能。InnoDB在彙集索引中存儲用戶數據,以減小基於主鍵經常使用的查詢I/O。架構

爲了保持數據的完整性,InnoDB也支持外鍵參照完整性約束。有關InnoDB的更多信息,請參見第15章,InnoDB存儲引擎。

  • MyISAM:這些表有一個小的足跡。表級鎖限制在讀/寫工做負載的性能,因此它常常在只讀或讀 - 主要是在Web和數據倉庫工做負載配置使用。

  • Memory: 存儲全部的數據在RAM中,是爲了在環境中快速訪問,這個要求非關鍵數據的快速查找。這個引擎的前身爲HEAP引擎。使用它的例子正在降低。
    與它的緩衝池存儲器區域InnoDB提供一個通用和耐用的方式保持大部分或所有數據在內存中,而且NDBCLUSTER提供巨大分佈式數據集快速鍵值查找。

  • CSV:它的表是逗號分割值的text文件。CSV表格讓你能夠導入或轉儲CSV格式的數據,用腳本和應用程序讀取和寫入相同的格式進行數據交換。
    因爲CSV表不被索引,一般保存在InnoDB表中的數據在正常運行期間,只有在進口或出口階段使用CSV表。

  • Archive: 這些緊湊,沒有索引的表意用於存儲和檢索大量不多引用的歷史,歸檔,或安全審計信息。

  • Blackhole: 黑洞存儲引擎接受但不存儲數據,相似於Unix的/dev/null的設備。查詢老是返回一個空集。這些表能夠在DML語句被髮送到從服務器複製配置中使用,但主服務器不保留它本身的數據副本。

  • NDB (也稱爲NDBCLUSTER):該集羣數據庫引擎是特別適合於那些須要運行時間和可用性的最高程度的應用。

  • Merge: 啓用一個MySQL DBA或開發人員進行邏輯分組的一系列等同的MyISAM表,並引用它們做爲一個對象。適合VLDB環境,如數據倉庫。

  • Federated:提供一種能力,能夠經過鏈接隔離的MySQL服務器來從衆多的物理服務器中建立一個邏輯數據庫。十分適合於分佈式環境或數據集市環境。

  • Example: 這個引擎服務器在MySQL源碼中做爲一個例子,是介紹如何開始着手寫新的存儲引擎。它主要針對有興趣的開發者。存儲引擎是一個「存根」,什麼也不作。
    你可使用這個引擎建立表,可是不會有數據能夠存儲進去或者從中讀取到數據。

並不限制你只是用一個存儲引擎在一個完整的服務器或者架構中。你能夠指定任意一個表所使用的存儲引擎。好比,一個應用可能使用的最多的是InnoDB表,
一個CSV表數據導出到一個電子表格和臨時工做區的幾個MEMORY表。

選擇一個存儲引擎:

MySQL多種多樣的存儲引擎是爲了避免同的狀況所設計的。下面這個表格提供了一個關於MySQL一些存儲引擎的預覽。

存儲引擎功能摘要:

特性 MyISAM Memory InnoDB Archive NDB
存儲限制 256TB RAM 64TB None 384EB
事務 No No Yes No Yes
鎖定粒度
MVCC No No Yes No No
地理空間數據類型支持 Yes No Yes Yse Yes
地理空間索引支持 Yes No Yes[a] No No
B樹索引 Yes Yes Yes No No
T樹索引 No No No No Yes
哈希索引 No Yes No[b] No Yes
全文搜索索引 Yes No Yes[c] Yes No
彙集索引 No No Yes No No
數據緩存 No N/A Yes No Yes
索引緩存 Yes N/A Yes No Yes
壓縮數據 Yes[d] No Yes[e] Yes No
加密數據[f] Yes Yes Yes Yes Yes
集羣數據庫的支持 No No No No No
複製支持[g] Yes Yes Yes Yes Yes
外鍵支持 No No Yes No No
備份/點即時恢復[h] Yes Yes Yes Yes Yes
查詢緩存支持 Yes Yes Yes Yes Yes
數據字典更新統計 Yes Yes Yes Yes Yes

[a] InnoDB支持地理空間索引在MySQL5.7.5版本或者更高的版本是可用的

[b] InnoDB爲了其適應性哈希索引功能利用內部的哈希索引

[c] InnoDB支持全文索引在MySQL5.6.4版本或者更高的版本是可用的

[d] 壓縮MyISAM表只有當使用壓縮行格式是支持的。表使用MyISAM的壓縮行格式只能讀。

[e] 壓縮InnoDB表須要InnoDB Barracuda文件格式。

[f] 在服務器中實施(經過加密功能)。數據靜止加密表,在MySQL5.7版本或者更高的版本是可用的。

[g] 實施在服務器,而不是在存儲引擎。

[h] 實施在服務器,而不是在存儲引擎。

點擊這裏,提出本文的錯誤或分享您的看法~

相關文章
相關標籤/搜索