2010-11-20 129 views
48

我環顧四周,發現一些MySQL引擎是innodb和MyISAM。也許還有更多。我的問題是這些數據庫引擎是什麼?什麼是MySQL數據庫引擎?

不同的MySQL引擎有什麼區別?更重要的是,我如何決定使用哪一個?

+1

相關:http://serverfault.com/questions/219/how-do-you-choose-a-mysql-database-engine – 2010-11-20 16:50:26

回答

51
mysql> SHOW ENGINES; 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| Engine  | Support | Comment              | Transactions | XA | Savepoints | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 
| InnoDB  | YES  | Supports transactions, row-level locking, and foreign keys  | YES   | YES | YES  | 
| MRG_MYISAM | YES  | Collection of identical MyISAM tables       | NO   | NO | NO   | 
| BLACKHOLE | YES  | /dev/null storage engine (anything you write to it disappears) | NO   | NO | NO   | 
| CSV  | YES  | CSV storage engine            | NO   | NO | NO   | 
| MEMORY  | YES  | Hash based, stored in memory, useful for temporary tables  | NO   | NO | NO   | 
| FEDERATED | NO  | Federated MySQL storage engine         | NULL   | NULL | NULL  | 
| ARCHIVE | YES  | Archive storage engine           | NO   | NO | NO   | 
| MyISAM  | DEFAULT | Default engine as of MySQL 3.23 with great performance   | NO   | NO | NO   | 
+------------+---------+----------------------------------------------------------------+--------------+------+------------+ 

我個人總是使用InnoDB,如果我必須使用MySQL。它支持事務和外鍵,而MyISAM則不支持。

31

MyISAM和InnoDB是最常用的引擎。

MyISAM比InnoDB稍快,並實現了FULLTEXT索引,這對集成搜索功能非常有用。 MyISAM未處理並且未實現外鍵約束,這是一個主要缺點。

但是,您可以使用兩者中最好的一種,並使用不同的存儲引擎創建表。一些軟件(我認爲WordPress)使用Inno來獲取大多數數據,例如頁面,版本等之間的關係。帖子的記錄包含一個ID,該ID鏈接到使用MyISAM的單獨內容表中的記錄。這樣,內容存儲在具有最佳搜索功能的表格中,而大多數其他數據存儲在強制執行數據完整性的表格中。

如果我是你,我會選擇Inno,因爲它是最可靠的。如果需要,只能使用MyISAM作爲特定用途。

創建新表時,您可以將數據庫默認配置爲默認使用InnoDB。

9

不同的存儲引擎可用,有幾個原因不使用MyISAM或InnoDB引擎類型。 MyISAM在大多數情況下都可以使用,但是如果您的搜索和選擇相比您有更多的更新或插入,那麼InnoDB引擎中的性能會更好。爲了從InnoDB中獲得最佳性能,您需要調整服務器的參數,否則沒有理由不使用它。

MERGE引擎是從多個相同定義的表中查詢數據的非常有效的方式。 MEMORY引擎是對數據執行大量複雜查詢的最佳方式,這些查詢對於在基於磁盤的引擎上進行搜索效率低下。 CSV引擎是導出可用於其他應用程序的數據的好方法。 BDB非常適合具有經常訪問的唯一密鑰的數據。

This Image provides an overview of some storage engines provided with MySQL:

29

存儲引擎是處理不同的表類型的SQL操作MySQL的組件。 InnoDB是默認的(v5.7)和最通用的存儲引擎。 MySQL存儲引擎包括那些處理交易安全表和那些處理非交易安全表。

的MySQL支持的存儲引擎

  1. InnoDB:InnoDB的是MySQL事務安全(ACID兼容)存儲引擎,具有提交,回滾和崩潰恢復功能來保護用戶數據。 InnoDB行級鎖定(無需升級到更粗粒度鎖)和Oracle樣式一致的非鎖定讀取可提高多用戶併發性和性能。InnoDB將用戶數據存儲在聚簇索引中,以減少基於主鍵的常見查詢的I/O。爲了保持數據的完整性,InnoDB還支持FOREIGN KEY引用完整性約束。有關InnoDB的更多信息,請參閱第14章InnoDB存儲引擎。

  2. MyISAM這些表的佔地面積很小。表級鎖定會限制讀/寫工作負載的性能,因此它通常用於Web和數據倉庫配置中的只讀或只讀工作負載。

  3. Memory 0123:將所有數據存儲在RAM中,以便在需要快速查找非關鍵數據的環境中快速訪問。這款發動機以前被稱爲HEAP發動機。其用例正在減少; InnoDB及其緩衝池內存區提供了一種通用和持久的方式來保存大部分或全部數據到內存中,NDBCLUSTER爲大型分佈式數據集提供快速鍵值查找。

  4. CSV:它的表格實際上是以逗號分隔的值的文本文件。 CSV表格允許您導入或轉儲CSV格式的數據,以便與讀取和寫入相同格式的腳本和應用程序交換數據。因爲CSV表沒有建立索引,所以通常在正常操作期間將數據保存在InnoDB表中,並且在導入或導出階段只使用CSV表。

  5. Archive這些壓縮的非索引表用於存儲和檢索大量很少參考的歷史,存檔或安全審計信息。

  6. Blackhole:Blackhole存儲引擎接受但不存儲數據,類似於Unix/dev/null設備。查詢總是返回一個空集。這些表可用於將DML語句發送到從屬服務器的複製配置中,但主服務器不保留其自己的數據副本。

  7. NDB(也稱爲NDBCLUSTER):此羣集數據庫引擎特別適用於需要儘可能高的正常運行時間和可用性的應用程序。

  8. Merge:使MySQL DBA或開發人員能夠對一系列相同的MyISAM表進行邏輯分組,並將它們作爲一個對象引用。適用於VLDB環境,如數據倉庫。

  9. Federated:提供鏈接單獨的MySQL服務器以從多個物理服務器創建一個邏輯數據庫的能力。非常適合分佈式或數據集市環境。

  10. Example此引擎在MySQL源代碼中作爲示例,說明如何開始編寫新的存儲引擎。這主要是開發人員感興趣的。存儲引擎是一個什麼也不做的「存根」。您可以使用此引擎創建表格,但不能將數據存儲在其中或從中檢索數據。

您並不限於在整個服務器或模式中使用相同的存儲引擎。您可以爲任何表指定存儲引擎。例如,應用程序可能主要使用InnoDB表格,其中一個CSV表格用於將數據導出到電子表格以及一些用於臨時工作區的MEMORY表格。

參考:12

enter image description here

+0

有關此答案的更新版本,請請參閱從其複製的頁面:http://dev.mysql.com/doc/refman/5.7/en/storage-engines.html – GolezTrol 2016-06-22 10:59:52

1

可能你會得到更多資訊: ​​

數據庫引擎(或存儲引擎)是基礎軟件組件,數據庫管理系統(DBMS)用於從數據庫創建,讀取,更新和刪除(CRUD)數據。大多數數據庫管理系統都包含自己的應用程序編程接口(API),它允許用戶在不通過DBMS的用戶界面的情況下與其底層引擎進行交互。

2

存儲引擎是數據庫管理系統用來從數據庫創建,讀取和更新數據的軟件模塊。 MySQL中有兩種類型的存儲引擎:事務性和非事務性。 對於MySQL 5.5及更高版本,默認存儲引擎是InnoDB。 MySQL 5.5之前的默認存儲引擎是MyISAM。選擇正確的存儲引擎是一項重要的戰略決策,它將影響未來的發展。在本教程中,我們將使用MyISAM,InnoDB,內存和CSV存儲引擎。如果你是MySQL的新手,並且正在研究MySQL數據庫管理系統,那麼這不是一個問題。如果你正在計劃一個生產數據庫,那麼情況會變得更加複雜。您可以在這裏閱讀更多:http://zetcode.com/databases/mysqltutorial/storageengines/