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