ITPub博客

首页 > 数据库 > > 15.1 存储引擎

15.1 存储引擎

作者:飘絮絮絮丶 时间:2020-05-11 14:17:36 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma



要确定服务器支持的存储引擎,请使用SHOW ENGINES语句。 “支持”列中的值指示是否可以使用引擎。 值YES,NO或DEFAULT表示引擎可用,不可用或当前设置为默认存储引擎。



MYSQL 5.7 支持的存储引擎



  • InnoDB:

MySQL 5.7中的默认存储引擎。 InnoDB是一种适用于MySQL的事务安全(ACID兼容)存储引擎,具有提交,回滚和崩溃恢复功能,可保护用户数据。 InnoDB行级锁定(没有升级到更粗略的粒度锁)和Oracle风格的一致非锁定读取增加了多用户并发性和性能。 InnoDB将用户数据存储在聚簇索引中,以减少基于主键的常见查询的I / O. 为了保持数据完整性,InnoDB还支持FOREIGN KEY参照完整性约束。


  • MYISAM:

这些表footprint较小。 表级锁定限制了读/写工作负载的性能,因此它通常用于Web和数据仓库配置中的只读或大部分读取工作负载。


  • Memory:

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


  • CSV:

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


  • Archive:

这些紧凑的无索引表旨在存储和检索大量很少引用的历史,存档或安全审计信息。


  • Blackhole:

Blackhole存储引擎接受但不存储数据,类似于Unix / dev / null设备。 查询始终返回空集。 这些表可用于将DML语句发送到从属服务器的复制配置,但主服务器不保留其自己的数据副本。


  • NDB(也称为NDBCLUSTER):

此集群数据库引擎特别适用于需要尽可能高的正常运行时间和可用性的应用程序。


  • Merge:

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


  • Federated:

提供链接单独的MySQL服务器以从许多物理服务器创建一个逻辑数据库的功能。 非常适合分布式或数据集成环境。


  • Example:

该引擎作为MySQL源代码中的一个示例,说明了如何开始编写新的存储引擎。 它主要是开发人员感兴趣的。 存储引擎是一个什么都不做的“stub”。 您可以使用此引擎创建表,但不能在其中存储数据或从中检索数据。



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



设置存储引擎


创建新表时,可以通过向CREATE TABLE语句添加ENGINE表选项来指定要使用的存储引擎:


-- ENGINE=INNODB not needed unless you have set a different

-- default storage engine.

CREATE TABLE t1 (i INT) ENGINE = INNODB;

-- Simple table definitions can be switched from one to another.

CREATE TABLE t2 (i INT) ENGINE = CSV;

CREATE TABLE t3 (i INT) ENGINE = MEMORY;



省略ENGINE选项时,将使用默认存储引擎。 默认引擎是MySQL 5.7中的InnoDB。 您可以使用--default-storage-engine服务器启动选项指定默认引擎,也可以在my.cnf配置文件中设置default-storage-engine选项。



您可以通过设置default_storage_engine变量为当前会话设置默认存储引擎:


SET default_storage_engine=NDBCLUSTER;


使用CREATE TEMPORARY TABLE创建的TEMPORARY表的存储引擎可以通过在启动时或运行时设置default_tmp_storage_engine来为永久表的引擎分别设置。


要将表从一个存储引擎转换为另一个存储引擎,请使用指示新引擎的ALTER TABLE语句:


ALTER TABLE t ENGINE = InnoDB;


如果您尝试使用未编译,或编译但已停用的存储引擎,则MySQL会使用默认存储引擎创建表。 例如,在复制设置中,您的主服务器可能使用InnoDB表以获得最大安全性,但是从服务器使用其他存储引擎来提高速度,但会牺牲持久性或并发性。



默认情况下,只要CREATE TABLE或ALTER TABLE无法使用默认存储引擎,就会生成警告。 如果所需的引擎不可用,为了防止出现混乱,意外的行为,请启用NO_ENGINE_SUBSTITUTION SQL模式。 如果所需的引擎不可用,则此设置会产生错误而不是警告,并且不会创建或更改该表。


对于新表,MySQL总是创建一个.frm文件来保存表和列定义。 表的索引和数据可以存储在一个或多个其他文件中,具体取决于存储引擎。 服务器在存储引擎级别上创建.frm文件。 各个存储引擎会创建他们管理的表所需的任何其他文件。 如果表名包含特殊字符,则表文件的名称包含这些字符的编码版本

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3139988/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42141