MySQL 表类型/存储引擎
MySQL表类型/存储引擎是一项重要的功能,可以有效地用于提高数据库的性能。它处理创建、读取和更新操作,用于存储和管理数据库中的信息。在本教程中,我们将了解MySQL中使用的各种存储引擎或表类型。
以下是MySQL支持的各种表类型/存储引擎:
- ISAM
- MyISAM
- MERGE
- InnoDB
- MEMORY (HEAP)
- ARCHIVE
- BDB
- CSV
- FEDERATED
我们可以使用以下查询来确定我们的MySQL服务器支持哪些表类型/存储引擎。
mysql> SHOW ENGINES;
支持 列的值表示引擎在当前服务器中是否可用。值为 YES、NO 或 DEFAULT 表示表类型 可用、不可用 和 可用且当前设置为默认 表类型/存储引擎。
了解MySQL中每个表类型的特性非常重要,这些特性使我们能够为我们的表选择最合适的表类型,从而最大限度地提高我们数据库的性能。MySQL中的每个表类型都有其优点和缺点。让我们了解每个表类型/存储引擎及其优缺点,以便在它们之间进行选择。
ISAM表
它的缩写是 索引顺序访问方法(Indexed Sequential Access Method) 。这种表类型/存储引擎已被弃用并从MySQL 5.x版本中移除。现在,MyISAM取代了此表的功能。ISAM表的大小为 4 GB ,需要昂贵的硬件。它不可移植。
MyISAM表
它是ISAM存储引擎的扩展。MyISAM表类型针对 压缩和速度进行了优化,可以轻松地在系统之间移植 。在5.5版本之前,如果在创建表时未指定表类型,它将作为默认存储引擎。从5.x版本开始,默认表类型/存储引擎为InnoDB。
MyISAM表的大小取决于操作系统,最多可达 256 TB 。它可以压缩为 只读 表,在内存中节省空间。MyISAM表类型可以在每个表中存储64个键,且最大键长度为1024个字节。MyISAM表的工作速度非常快,但不支持事务。
MyISAM的优点
- 对于新手来说,最好从MyISAM开始,因为它设计和创建简单。
- 总体条件下,它比其他存储引擎更快。
- 它支持全文索引/搜索。
MyISAM的缺点
- MyISAM表不支持事务。
- 它具有较差的数据完整性和崩溃恢复能力。
- 当锁定整个表时,MyISAM比InnoDB更慢。
InnoDB表
MySQL中的InnoDB表是完全 支持事务安全存储引擎 的表类型。它是第一种支持外键的表类型。InnoDB表还提供了最佳性能。它的大小可以达到 64TB 。InnoDB表也可以像MyISAM一样在系统之间移植。如果有必要,InnoDB表还可以由MySQL进行检查和修复。
InnoDB的优点
- 在处理大量数据时,InnoDB提供最佳性能。
- InnoDB表根据主键在磁盘上排列我们的数据。
InnoDB的缺点
- 与MyISAM相比,InnoDB表在磁盘上占用更多空间。
MERGE表
MERGE表也被称为 MRG_MyISAM 。这个表将具有相似结构(具有相同顺序的相同列和索引信息)的多个MyISAM表合并为一个表。该表使用组成表的索引,因为它没有自己的索引。当我们连接多个表时,它也可以用于加快数据库性能。在MERGE表上只能执行INSERT、SELECT、DELETE和UPDATE操作。如果在此存储引擎中使用 DROP TABLE 查询,则MySQL只会删除MERGE规范,底层表不会受到影响。
MERGE的优点
- 这个表的主要优点是可以消除对MyISAM表的大小限制。
- 它可以执行更高效的搜索和修复。
- 它可以轻松管理一组日志表。
MERGE的缺点
- MySQL允许我们只使用相同的(相似的结构)MyISAM表作为MERGE表。
- 它无法支持所有MyISAM特性,例如我们无法在MERGE表上创建FULLTEXT索引。
- 它读取索引的速度较慢。
内存表
内存表类型/存储引擎 创建在内存中存储的表 。在MySQL 4.1版本之前,它也被称为 HEAP 。这种表类型比MyISAM更快,因为它使用 哈希索引 可以更快地检索结果。我们已经知道存储在内存中的数据可能会由于电力问题或硬件故障而崩溃。因此,我们只能将该表用作来自其他表的临时工作区或只读缓存的数据。因此,内存/堆表将在MySQL服务器停止或重新启动时丢失。内存/堆表的数据生命周期取决于数据库服务器的正常运行时间。
内存的优点
该表类型的主要优点是速度非常快,这是因为它使用了哈希索引来更快地检索结果。
内存的缺点
长期使用MEMORY存储并不是一个好主意,因为一旦断电或硬件崩溃,数据就很容易丢失。
CSV表
CSV表类型/存储引擎将数据存储在文件中的逗号分隔值中。它提供了一种方便的方式将数据迁移到许多不同的软件包,如电子表格软件。这种表类型并不像一般的数据库引擎那样好,但它能够使我们以最有效和最容易的方式交换数据。此外,在读取操作期间,它将扫描整个表。
CSV的优点
当我们需要将复杂数据从一个应用程序导出到CSV文件中,然后再导入到另一个应用程序中时,这种表类型/存储引擎非常有优势。
CSV的缺点
- 存储大量数据或较大的数据类型(如BLOB)并不适合,尽管支持这些类型。
- 由于没有索引,数据检索较慢。
联合表
联合表类型/存储引擎支持MySQL 5.03版本及以上,允许无需使用集群/复制技术即可访问来自远程MySQL服务器的数据。位于本地存储中的联合存储引擎不存储任何数据。如果我们从存储在本地内存中的联合表查询数据,MySQL会自动从远程联合表中提取数据。需要注意的是,这是服务器访问远程数据库的一种方式,而不是客户端。这是一种有效的方式,可以将来自多个主机的数据合并在一起,或者将远程数据库的数据复制到本地表中,而无需使用数据导入和导出方法。
存档表
该表类型/存储引擎允许以压缩格式存储大量数据,以节省磁盘空间,并且无法修改。因此,它是用于存储不再活动使用的日志数据(如旧的发票或销售数据)的完美存储引擎。它在插入时压缩数据,并可以使用Zlib库进行解压缩。
存档表仅支持插入和选择查询。它不支持大多数数据类型,例如索引数据类型,没有这些类型,我们需要扫描整个表以读取行。
由于它以压缩格式存储信息,如果要读取表格,我们首先需要解压缩信息。这个过程需要时间来执行复杂的搜索和检索。因此,如果在这些表格中执行大量查询,最好使用另一个表格,如MyISAM。
BDB表
BDB代表Berkeley DB引擎,它是由SleepyCat软件开发的。它类似于具有事务安全性的InnoDB。它基于散列存储机制,使信息的恢复非常快速。它支持页面级锁定,但数据文件不可移植。