目录
1.如何理解存储引擎?
2.MySQL 提供的存储引擎
3.存储引擎的功能特性
(1)存储介质
(2)事务处理能力
(3)锁定
(4)备份和恢复
(5)优化
(6)外键的引用完整性
(7)全文本搜索
(8)空间数据
1.如何理解存储引擎?
存储引擎是MySQL 中负责数据存储和检索的服务器组件,它充当了不同表类型的处理程序。
存储引擎的主要任务包括:
- 数据存储:将数据存储在磁盘或内存中;支持不同的存储格式(如 InnoDB 的表空间、MyISAM 的文件分离)。
- 数据检索:提供高效的索引机制(如 B+ 树、哈希索引);支持快速的行操作(如插入、更新、删除)。
- 事务和并发控制:支持事务(如 InnoDB)或提供简单的锁机制(如 MyISAM)。
- 优化:提供行级优化(如 InnoDB 的 MVCC)和索引优化。
表的存储引擎通常不会影响SQL层的操作,通常,SQL层解析所有有效的SQL语句,存储层处理SQL层下发的行操作(如读取、写入、更新)。这种分层设计使得 MySQL 可以支持多种存储引擎,同时保持 SQL 层的统一性。
SQL 语句是独立于存储引擎的,除了以下语句:
- CREATE TABLE 有一个ENGINE 选项,指定每个表使用哪个存储引擎。
- ALTER TABLE 有一个ENGINE 选项,可以将表转换为使用不同的存储引擎。
某些功能仅在某些存储引擎中可用:
- 仅InnoDB 和NDB 支持:外键 和 事务控制操作,如COMMIT 和ROLLBACK
- 只有InnoDB 和MyISAM 支持全文索引
2.MySQL 提供的存储引擎
- InnoDB(默认的内置存储引擎)
- MyISAM (常用在旧的系统中)
- MEMORY
- ARCHIVE
- BLACKHOLE
- MERGE
- CSV
- FEDERATED (默认被禁用)
- NDBCLUSTER (在MySQL Cluster 发行版中可用)
3.存储引擎的功能特性
(1)存储介质
存储引擎支持不同的存储介质,以适应不同的应用场景:
磁盘:大数据量、数据持久化存储。
内存:Memory 存储引擎将数据存储在内存中,读写速度极快。适合临时数据或缓存数据,但数据库重启后数据会丢失。
网络数据节点:分布式存储引擎(如 NDB)将数据存储在多个网络节点上。适合分布式系统和高可用性场景。
空 (BLACKHOLE):不存储任何数据,所有写入操作都会被丢弃。适合数据复制或测试场景。
(2)事务处理能力
多语句事务:支持事务的存储引擎(如 InnoDB)允许将多个 SQL 语句作为一个事务执行。事务可以提交(Commit)或回滚(Rollback)。
隔离级别:支持不同的事务隔离级别(如读未提交、读已提交、可重复读、串行化)。隔离级别决定了事务之间的可见性和并发性能。
(3)锁定
锁定机制用于管理并发访问。
锁定粒度:
表级锁:锁定整个表(如 MyISAM)。
行级锁:锁定单行数据(如 InnoDB)。
更细粒度的锁可以提高并发性能。
多版本并发控制(MVCC):
MVCC 通过保存数据的多个版本来实现非阻塞读操作。适合高并发读写的场景(如 InnoDB)。
(4)备份和恢复
存储引擎的备份和恢复机制因复杂性不同而有所差异。
复杂存储引擎(如 InnoDB、NDB):在内部保持数据一致性,支持热备份和崩溃恢复。备份文件可能不包含数据库的一致快照,需要通过日志(如 Redo Log、Undo Log)恢复。
Q:什么是热备份?
A:在数据库运行期间进行备份,不需要停止服务。
Q:如何理解备份文件可能不包含数据库的一致快照?
A:复杂存储引擎的备份文件可能不是数据库在某一时刻的完整、一致的状态。这是因为备份过程中数据库可能仍在运行,数据可能正在被修改。
简单存储引擎(如 MyISAM):文件系统备份可以直接复制数据文件(如 .MYD
和 .MYI
)。由于缺乏事务支持,备份文件与数据库状态一致。
(5)优化
存储引擎通过使用索引(使用 B+ 树、哈希等索引结构加速查询)、缓冲区(通过批量写入和延迟写入磁盘,优化写操作,提高磁盘性能。)和内存(将热点数据加载到内存中,减少磁盘 I/O)来优化性能。
(6)外键的引用完整性
- 支持外键的存储引擎(如 InnoDB)可以保证数据的引用完整性。
- 外键约束确保关联表之间的数据一致性。
(7)全文本搜索
持全文本搜索的存储引擎(如 InnoDB、MyISAM)可以高效地处理文本数据的搜索。全文本索引支持关键词搜索、模糊匹配等功能。
(8)空间数据
支持空间数据的存储引擎(如 InnoDB、MyISAM)可以存储和查询地理空间数据(如点、线、面)。空间索引(如 R 树)用于加速空间查询。