表的内容
存储引擎是处理不同表类型的SQL操作的MySQL组件。InnoDB
是默认的和最通用的存储引擎,Oracle建议对表使用它,除了特殊的用例。(创建表
语句在MySQL 5.6创建InnoDB
默认表。)
MySQL服务器使用了一个可插入的存储引擎架构,允许存储引擎在运行的MySQL服务器上加载和卸载。
要确定服务器支持哪些存储引擎,请使用显示引擎
声明。的值。支持
列表示是否可以使用引擎。的值是的
,没有
,或默认的
表示当前设置为默认存储引擎的引擎有可用、不可用或可用。
mysql >显示引擎\ G *************************** 1。行 *************************** 引擎:PERFORMANCE_SCHEMA支持:是的评论:性能模式交易:没有XA:不保存点:不 *************************** 2。行 *************************** 引擎:InnoDB支持:默认评论:支持事务,行级锁,和外键事务:是的XA:是的保存点:是的 *************************** 3所示。行 *************************** 引擎:MRG_MYISAM支持:是的评论:收集相同的MyISAM表事务:没有XA:不保存点:不 *************************** 4所示。行 *************************** 引擎:黑洞支持:是的评论:/ dev / null存储引擎(任何你写它消失了)交易:没有XA:不保存点:不 *************************** 5。行***************************引擎:MyISAM支持:YES注释:MyISAM存储引擎事务:NO XA: NO保存点:NO…
本章涵盖了特殊用途的MySQL存储引擎的用例。它不包括默认值InnoDB
存储引擎或NDB
存储引擎所覆盖的第14章,InnoDB存储引擎而且第18章,MySQL NDB Cluster 7.3和NDB Cluster 7.4.对于高级用户,本章还包含对可插拔存储引擎架构的描述(参见第15.11节,“MySQL存储引擎架构概述”).
有关商业MySQL Server二进制文件中提供的特性的信息,请参见MySQL版本, MySQL网站。可用的存储引擎可能取决于您使用的MySQL版本。
关于MySQL存储引擎的常见问题的答案,请参见第A.2节,“MySQL 5.6常见问题:存储引擎”.
MySQL 5.6支持的存储引擎
InnoDB
: MySQL 5.6中默认的存储引擎。InnoDB
是一个事务安全(符合ACID)的MySQL存储引擎,具有提交、回滚和崩溃恢复功能,以保护用户数据。InnoDB
行级锁定(不升级为更粗粒度的锁)和oracle风格一致的非锁定读取可以提高多用户并发性和性能。InnoDB
将用户数据存储在聚集索引中,以减少基于主键的常见查询的I/O。为了保持数据的完整性,InnoDB
还支持外键
引用完整性约束。有关InnoDB
,请参阅第14章,InnoDB存储引擎.MyISAM
这些桌子占地面积小。表级锁限制了读/写工作负载中的性能,因此它经常用于Web和数据仓库配置中的只读或以读为主的工作负载。内存
:将所有数据存储在RAM中,以便在需要快速查找非关键数据的环境中快速访问。这种发动机以前被称为堆
引擎。它的用例正在减少;InnoDB
与它的缓冲池内存区域提供了一种通用和持久的方式来将大部分或所有数据保存在内存中,和NDBCLUSTER
为巨大的分布式数据集提供快速键值查找。CSV
:它的表格实际上是带有逗号分隔值的文本文件。CSV表允许您以CSV格式导入或转储数据,以便与读写相同格式的脚本和应用程序交换数据。因为CSV表没有索引,所以通常将数据保存在其中InnoDB
只在导入或导出阶段使用CSV表。存档
:这些紧凑的、无索引的表用于存储和检索大量很少引用的历史、归档或安全审计信息。黑洞
:黑洞存储引擎接受但不存储数据,类似于Unix/ dev / null
设备。查询总是返回空集合。这些表可以在复制配置中使用,其中DML语句被发送到副本,但源服务器不保留自己的数据副本。NDB
(也称为NDBCLUSTER
) -这种集群数据库引擎特别适合于需要尽可能高的正常运行时间和可用性的应用程序。合并
:允许MySQL DBA或开发人员对一系列相同的数据进行逻辑分组MyISAM
表并将它们作为一个对象引用。适用于数据仓库等VLDB环境。联邦
:提供连接独立的MySQL服务器的能力,从而从多个物理服务器创建一个逻辑数据库。非常适合分布式或数据集市环境。例子
:该引擎在MySQL源代码中用作示例,说明如何开始编写新的存储引擎。它主要是开发人员感兴趣的。存储引擎为”存根”什么也不做。可以使用此引擎创建表,但不能在其中存储数据或从中检索数据。
您并不局限于对整个服务器或模式使用相同的存储引擎。您可以为任何表指定存储引擎。例如,一个应用程序可能经常使用InnoDB
表,用一个CSV
表导出数据到电子表格和一些内存
临时工作区表。
选择存储引擎
MySQL提供的各种存储引擎是根据不同的用例设计的。下表概述了MySQL提供的一些存储引擎,并说明了表后的注意事项。
表15.1存储引擎特性摘要
功能 | MyISAM | 内存 | InnoDB | 存档 | NDB |
---|---|---|---|---|---|
b -树索引 | 是的 | 是的 | 是的 | 没有 | 没有 |
备份/时间点恢复(注1) | 是的 | 是的 | 是的 | 是的 | 是的 |
集群数据库支持 | 没有 | 没有 | 没有 | 没有 | 是的 |
聚集索引 | 没有 | 没有 | 是的 | 没有 | 没有 |
压缩数据 | 是的(注2) | 没有 | 是的 | 是的 | 没有 |
数据缓存 | 没有 | N/A | 是的 | 没有 | 是的 |
加密的数据 | 是的(注3) | 是的(注3) | 是的(注4) | 是的(注3) | 是的(注3) |
外键的支持 | 没有 | 没有 | 是的 | 没有 | 是的(注5) |
全文搜索索引 | 是的 | 没有 | 是的(注6) | 没有 | 没有 |
地理空间数据类型支持 | 是的 | 没有 | 是的 | 是的 | 是的 |
地理空间索引支持 | 是的 | 没有 | 是的(注7) | 没有 | 没有 |
散列索引 | 没有 | 是的 | 没有(注8) | 没有 | 是的 |
索引缓存 | 是的 | N/A | 是的 | 没有 | 是的 |
锁的粒度 | 表格 | 表格 | 行 | 行 | 行 |
MVCC | 没有 | 没有 | 是的 | 没有 | 没有 |
复制支持(注1) | 是的 | 有限公司(注9) | 是的 | 是的 | 是的 |
存储限制 | 256年结核病 | 内存 | 64年结核病 | 没有一个 | 384年海尔哥哥 |
-树索引 | 没有 | 没有 | 没有 | 没有 | 是的 |
交易 | 没有 | 没有 | 是的 | 没有 | 是的 |
更新数据字典的统计信息 | 是的 | 是的 | 是的 | 是的 | 是的 |
注:
1.在服务器上实现,而不是在存储引擎上。
2.只有当使用压缩行格式时,才支持压缩的MyISAM表。使用MyISAM压缩行格式的表是只读的。
3.在服务器端通过加密功能实现。
4.在服务器端实现加密功能;在MySQL 5.7及更高版本中,支持静态数据加密。
5.MySQL集群NDB 7.3及更高版本支持外键。
6.MySQL 5.6及更高版本支持FULLTEXT索引。
7.MySQL 5.7及更高版本支持地理空间索引。
8.InnoDB内部使用哈希索引作为自适应哈希索引。
9.请参阅本节后面的讨论。