什么是MySQL数据库引擎?

我环顾四周,发现一些MySQL引擎是innodb和MyISAM。 也许还有更多。 我的问题是这些数据库引擎是什么?

不同的MySQL引擎有什么区别? 更重要的是,我如何决定使用哪一个?

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则不支持。

MyISAM和InnoDB是最常用的引擎。

MyISAM比InnoDB稍快,并且实现了FULLTEXT索引,对于集成searchfunction非常有用。 MyISAM不处理,不实现外键约束,这是一个主要的缺点。

但是,您可以使用两者中最好的一种,并使用不同的存储引擎创build表。 一些软件(我认为是WordPress)使用Inno来获取大多数数据,比如页面,版本等之间的关系。post的logging包含一个ID,它链接到使用MyISAM的单独内容表中的logging。 这样,内容就存储在具有最佳search能力的表格中,而大多数其他数据存储在强制执行数据完整性的表格中。

如果我是你,我会选Inno,因为这是最可靠的。 只有在需要时才使用MyISAM来达到特定的目的。

创build新表时,可以将数据库configuration为默认使用InnoDB。

存储引擎是处理不同表types的SQL操作的MySQL组件。 InnoDB是默认的(v5.7)和最通用的存储引擎。 MySQL存储引擎包括那些处理事务安全表和那些处理非事务安全表的。

MySQL支持的存储引擎

  1. InnoDB :InnoDB是MySQL的事务安全(ACID兼容)存储引擎,具有提交,回滚和崩溃恢复function来保护用户数据。 InnoDB行级locking(不升级到更粗颗粒度的锁)和Oracle样式一致的非locking读取增加了多用户并发性和性能。 InnoDB将用户数据存储在聚簇索引中,以减less基于主键的常见查询的I / O。 为了保持数据完整性,InnoDB还支持FOREIGN KEY引用完整性约束。 有关InnoDB的更多信息,请参阅第14章InnoDB存储引擎。

  2. MyISAM :这些表的占地面积很小。 表级locking会限制读/写工作负载的性能,所以它通常用于Web和数据仓库configuration中的只读或只读工作负载。

  3. 内存 :将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中快速访问。 这个引擎以前被称为HEAP引擎。 其用例正在减less; InnoDB及其缓冲池内存区提供了将大部分或全部数据保存在内存中的通用持久方法,NDBCLUSTER为大型分布式数据集提供快速键值查找。

  4. CSV :它的表格实际上是以逗号分隔的值的文本文件。 CSV表格允许您导入或转储CSV格式的数据,以便与读取和写入相同格式的脚本和应用程序交换数据。 由于CSV表没有build立索引,因此通常在正常操作期间将数据保存在InnoDB表中,并且在导入或导出阶段只使用CSV表。

  5. 存档 :这些精简的未标记的表格用于存储和检索大量很less参考的历史,存档或安全审计信息。

  6. 黑洞 :Blackhole存储引擎接受但不存储数据,类似于Unix / dev / null设备。 查询总是返回一个空集。 这些表可用于将DML语句发送到从属服务器的复制configuration中,但主服务器不保留其自己的数据副本。

  7. NDB (也称为NDBCLUSTER):此集群数据库引擎特别适用于要求尽可能高的正常运行时间和可用性的应用程序。

  8. 合并 :使MySQL DBA或开发人员能够将一系列相同的MyISAM表逻辑分组,并将它们作为一个对象引用。 适用于VLDB环境,如数据仓库。

  9. 联合 :提供链接单独的MySQL服务器以从许多物理服务器创build一个逻辑数据库的能力。 非常适合分布式或数据集市环境。

  10. 例如 :这个引擎是MySQL源代码中的一个例子,说明了如何开始编写新的存储引擎。 这主要是开发者感兴趣的。 存储引擎是一个什么也不做的“存根”。 您可以使用此引擎创build表格,但不能将数据存储在其中或从中检索。

您不限于为整个服务器或模式使用相同的存储引擎。 您可以为任何表指定存储引擎。 例如,应用程序可能主要使用InnoDB表,其中一个CSV表用于将数据导出到电子表格,另外一些用于临时工作区的MEMORY表。

参考: 1 2

在这里输入图像说明

不同的存储引擎可用,有几个原因不使用MyISAM或InnoDB引擎types。 MyISAM在大多数情况下都可以使用,但是如果你的search和select比你的search和插入更多,那么你将会从InnoDB引擎中获得更好的性能。 为了从InnoDB中获得最好的性能,你需要调整服务器的参数,否则没有理由不使用它。

MERGE引擎是从多个相同定义的表中查询数据的非常有效的方式。 MEMORY引擎是对数据执行大量复杂查询的最佳方法,这些查询对于在基于磁盘的引擎上进行search效率不高。 CSV引擎是导出可用于其他应用程序的数据的好方法。 BDB非常适合具有经常访问的唯一密钥的数据。

本图提供了MySQL提供的一些存储引擎的概述:

可能你会在这里得到更多的信息: https : //en.wikipedia.org/wiki/Database_engine

数据库引擎(或存储引擎)是数据库pipe理系统(DBMS)用来从数据库创build,读取,更新和删除(CRUD)数据的底层软件组件。 大多数数据库pipe理系统都包含自己的应用程序编程接口(API),用户无需通过DBMS的用户界面即可与其底层引擎进行交互。