📜  MySQL表类型/存储引擎

📅  最后修改于: 2020-11-19 04:37:54             🧑  作者: Mango

MySQL表类型/存储引擎

MySQL表类型/存储引擎是必不可少的功能,可以有效地使用它们来最大化数据库的性能。它处理创建,读取和更新操作,以在数据库中存储和管理信息。在本教程中,我们将了解MySQL中使用的各种存储引擎或表类型。

以下是MySQL中支持的各种表类型/存储引擎:

  • 我的ISAM
  • 合并
  • 创新数据库
  • 内存(堆)
  • 存档
  • 银行
  • CSV
  • 联合

我们可以使用以下查询来确定我们的MySQL服务器支持哪些表类型/存储引擎。

mysql> SHOW ENGINES;

支持列值指示在当前服务器中是否可以使用引擎。值为YES,NO或DEFAULT表示表类型可用,不可用,可用且当前被设置为默认表类型/存储引擎。

必须了解MySQL中每种表类型的功能,这些功能使我们能够为表确定最合适的功能,从而最大程度地发挥数据库的性能。 MySQL中的每种表类型都有其自身的优缺点。让我们了解每种表类型/存储引擎及其在选择其中使用哪种表时的优缺点。

ISAM表

缩写为索引顺序访问方法。该表类型/存储引擎已被弃用,并已从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表完全支持符合ACID的事务安全存储引擎。这是第一个支持外键的表类型。 InnoDB表还提供最佳性能。它的大小可以高达64TB。 InnoDB表也可以在系统之间移植到类似于MyISAM的系统之间。必要时,MySQL也可以检查和修复InnoDB表。

InnoDB的优势

  • InnoDB在处理大量数据时可提供最佳性能。
  • InnoDB表根据主键将数据安排在磁盘上。

InnoDB的缺点

  • 与MyISAM相比,InnoDB表占用更多的磁盘空间。

合并表

MERGE表也称为MRG_MyISAM。该表将具有相似结构(相同列的相同列和索引信息)的多个MyISAM表组合到一个表中。该表使用组件表的索引,因为它没有自己的索引。当我们连接多个表时,它也可以用来加快数据库的性能。我们只能对MERGE表执行INSERT,SELECT,DELETE和UPDATE操作。如果我们在此存储引擎中使用DROP TABLE查询,则MySQL仅删除了MERGE规范,并且基础表不会受到影响。

合并的优势

  • 该表的主要优点是消除了MyISAM表的大小限制。
  • 它执行更有效的搜索和修复。
  • 它可以轻松管理日志表集。

MERGE的缺点

  • MySQL允许我们仅将相同(相似结构)的MyISAM表用于MERGE表。
  • 它不能支持MyISAM的所有功能,例如我们不能在MERGE表上创建FULLTEXT索引。
  • 它读取索引的速度较慢。

内存表

内存表类型/存储引擎创建表,这些表将存储在我们的内存中。在MySQL 4.1版之前,它也称为HEAP。此表类型比MyISAM快,因为它使用散列索引来更快地检索结果。我们已经知道,由于电源问题或硬件故障,存储在内存中的数据可能会崩溃。因此,我们只能将此表用作从其他表提取的数据的临时工作区或只读缓存。因此,每当MySQL服务器停止或重新启动时,内存/堆表将丢失。内存/堆表的数据寿命取决于数据库服务器的正常运行时间。

记忆的优势

这种表类型的主要优点是它的速度非常快。这是因为它使用哈希索引可以更快地检索结果。

记忆的缺点

长期使用MEMORY存储不是一个好主意,因为一旦电源故障或硬件崩溃,数据很容易丢失。

CSV表格

CSV表类型/存储引擎将数据以逗号分隔的值存储在文件中。它提供了一种方便的方法来将数据迁移到许多不同的软件包中,例如电子表格软件。该表类型不如一般的数据库引擎好;但是,它使我们能够最有效,最轻松地交换数据。此外,它将在读取操作期间扫描整个表。

CSV的优点

当我们需要将复杂数据从一个应用程序导出到CSV文件,然后将其导入另一个应用程序时,此表类型/存储引擎非常有用。

CSV的缺点

  • 存储大量数据或较大的数据类型(如BLOB)不是很好,尽管支持这种类型。
  • 因为没有索引,这使数据检索变慢。

联合表

FEDERATED表类型/存储引擎支持版本5.03的MySQL,该版本允许从远程MySQL服务器访问数据,而无需使用群集/复制技术。位于本地存储中的联合存储引擎不存储任何数据。如果我们要从存储在本地内存中的联合表中查询数据,MySQL会自动从远程联合表中提取数据。需要注意的是,这是服务器而非客户端访问远程数据库的一种方式。这是一种不使用数据导入和导出方法而将来自多个主机的数据组合或将数据从远程数据库复制到本地表中的有效方法。

档案表

此表类型/存储引擎使我们能够以压缩格式存储大量数据,以节省磁盘空间并且无法修改。因此,它是存储不再有效使用的日志数据(例如旧发票或销售数据)的理想存储引擎。它在插入过程中压缩数据,并可以使用Zlib库将其解压缩。

归档表仅支持INSERT和SELECT查询。它不支持大多数数据类型,例如索引数据类型,否则,我们需要扫描整个表以读取行。

由于它以压缩格式存储信息,因此,如果我们要读取表,则首先需要对信息进行解压缩。此过程将花费一些时间来执行复杂的搜索和检索。因此,如果我们必须在这些表中执行大量查询,则使用另一个表(例如MyISAM)是有益的。

BDB表

BDB代表由SleepyCat软件开发的Berkeley DB引擎。它在事务安全方面类似于InnoDB。它基于散列存储机制,可以非常快速地恢复信息。它支持页面级锁定,但数据文件不可移植。