2010-11-20 124 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/