超详细的MySQL存储引擎讲解,学习MySQL这些知识你必须要会!

存储引擎

MySQL 是一个广泛使用的关系型数据库管理系统,它支持多种存储引擎,每种引擎都有自己独特的特点和适用场景。这些存储引擎决定了数据如何在数据库中存储、检索和管理的机制。

在这里插入图片描述

默认引擎

首先我们要知道,在创建表的时候,如果没有执行该表的存储引擎的话,那么默认采用那种存储引擎的方式呢?
其实是跟MySQL版本有关

  • MySQL 5.5及之后的版本中,默认的存储引擎是InnoDB。InnoDB是一个事务型存储引擎,它提供了事务安全表(ACID兼容)、行级锁定和外键等特性。这使得InnoDB成为许多需要高性能和事务支持的应用场景的首选。
  • MySQL 5.5之前的版本中,默认的存储引擎是MyISAM。MyISAM是一个非事务型存储引擎,它提供了较高的插入和查询速度,但不支持事务和外键。因此,它更适合于那些以读取操作为主、不需要事务支持的应用场景。

InnoDB

特点:

  • 事务支持:InnoDB 支持 ACID(原子性、一致性、隔离性、持久性)事务特性,是 MySQL 默认的存储引擎。
  • 行级锁定:InnoDB 使用行级锁定,可以高并发地处理事务,适用于写操作频繁的应用。
  • 外键支持:InnoDB 支持外键约束,可以维护数据的完整性。
  • 崩溃恢复:InnoDB 有强大的崩溃恢复能力,能够在系统崩溃后自动恢复数据。
  • MVCC(多版本并发控制):InnoDB 通过 MVCC 实现高效的并发控制。

查看当前默认引擎

要查看当前MySQL服务器支持的存储引擎以及默认的存储引擎,可以使用以下SQL语句:

SHOW ENGINES;

可以看到InnoDB引擎是DEFAULT(默认),所以InnoDB引擎是当前数据库的默认存储引擎
在这里插入图片描述

Engine Support Comment Transactions XA Savepoints
FEDERATED NO Federated MySQL storage engine NULL NULL NULL
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
MyISAM YES MyISAM storage engine NO NO NO
CSTORE NO Supports column store NULL NULL NULL
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
CSV YES CSV storage engine NO NO NO
ARCHIVE YES Archive storage engine NO NO NO

设置存储引擎

在查询结果中,DEFAULT关键字标识的引擎就是当前默认的存储引擎。此外,当在创建表时,可以通过ENGINE子句来明确指定表的存储引擎,

CREATE TABLE my_table (  
    id INT PRIMARY KEY,  
    name VARCHAR(255) NOT NULL  
) ENGINE=InnoDB;

在上面的代码中,我们明确指定了表的存储引擎为InnoDB。如果没有指定ENGINE子句,那么将使用MySQL服务器当前的默认存储引擎。

适用场景:

  • 需要事务支持的应用。
  • 写操作频繁,并发要求高的应用。
  • 数据完整性要求高的应用。

MyISAM

特点:

  • 不支持事务:MyISAM 不支持事务和外键。
  • 表级锁定:MyISAM 使用表级锁定,在写操作时锁定整个表,不适合高并发写操作。
  • 全文索引:MyISAM 支持全文索引,适合全文搜索。
  • 读取速度快:MyISAM 在读取速度方面通常比 InnoDB 快,特别是读取大量数据时。

适用场景:

  • 读操作频繁,写操作较少的应用。
  • 不需要事务支持的应用。
  • 需要全文搜索的应用。

Memory

特点:

  • 存储在内存中:Memory 存储引擎将数据存储在内存中,因此读写速度非常快。
  • 不支持持久化:由于数据存储在内存中,服务器重启后数据会丢失,适用于临时数据存储。
  • 表级锁定:Memory 引擎使用表级锁定。
  • 哈希索引和 B 树索引:Memory 引擎支持哈希索引和 B 树索引,默认使用哈希索引。

适用场景:

  • 临时数据存储。
  • 需要快速访问的数据。
  • 不需要持久化存储的数据。

NDB (Clustered)

特点:

  • 分布式存储:NDB 是 MySQL Cluster 的存储引擎,支持分布式存储和复制。
  • 高可用性和可扩展性:NDB 提供高可用性和可扩展性,适用于大型分布式系统。
  • 内存存储:NDB 也将数据存储在内存中,因此读写速度很快。

适用场景:

  • 需要高可用性和可扩展性的分布式系统。
  • 高并发读写操作。
  • 实时数据处理。

Archive

特点:

  • 压缩存储:Archive 存储引擎提供压缩存储,适用于存储历史数据或日志数据。
  • 只读:Archive 引擎是只读的,不支持更新和删除操作。
  • 高效的插入操作:Archive 引擎在插入操作方面非常高效。

适用场景:

  • 历史数据或日志数据的存储。
  • 需要压缩存储以节省空间的应用。

CSV

特点:

  • 文本存储:CSV 存储引擎将数据存储在逗号分隔值的文本文件中,易于导入导出。
  • 可读性强:CSV 文件是文本格式,易于阅读和编辑。
  • 不支持索引:CSV 引擎不支持索引,查询性能较差。

适用场景:

  • 数据导入导出。
  • 需要将数据存储在可读性强、易编辑的文件中的场景。

Federated

特点:

  • 分布式访问:Federated 存储引擎允许 MySQL 服务器访问远程 MySQL 服务器上的表,类似于分布式数据库。
  • 无缝集成:Federated 引擎使得访问远程表就像访问本地表一样简单。

适用场景:

  • 分布式数据库系统。
  • 需要跨多个 MySQL 服务器访问数据的场景。

TokuDB

特点:

  • 压缩存储:TokuDB 提供高效的压缩存储,节省存储空间。
  • 高并发写入:TokuDB 支持高并发写入,适合写操作频繁的应用。
  • 事务支持:TokuDB 支持事务特性。

适用场景:

  • 需要高效压缩存储的应用。
  • 写操作频繁,并发要求高的应用。

选择存储引擎的建议

  1. 根据具体的应用场景选择最合适的存储引擎。
  2. 如果需要事务支持和数据完整性,选择 InnoDB。
  3. 如果读操作频繁且不需要事务支持,可以选择 MyISAM。
  4. 临时数据存储和快速访问可以选择 Memory。
  5. 需要分布式存储和高可用性可以选择 NDB。
  6. 历史数据和日志存储可以选择 Archive。