【MySQL | 七、存储引擎是什么?】

存储引擎是什么?作用于哪里?

1. 存储引擎的定义

存储引擎(Storage Engine)是数据库管理系统中负责 数据的存储、检索和管理 的核心组件。它决定了数据如何存储在磁盘上,以及如何从磁盘中读取数据。存储引擎是数据库与底层文件系统之间的桥梁,负责将逻辑数据模型(如表、行、列)映射到物理存储结构(如文件、块、页)。


2. 存储引擎的作用范围

存储引擎的作用范围主要包括以下几个方面:

(1) 数据的存储与组织

  • 存储引擎决定了数据在磁盘上的存储格式和组织方式。例如:
    • InnoDB 使用 B+ 树作为索引结构,数据存储在页(Page)中。
    • MyISAM 将数据与索引分开存储,数据存储在 .MYD 文件中,索引存储在 .MYI 文件中。

(2) 数据的检索

  • 存储引擎负责实现数据的查询和检索逻辑。例如:
    • InnoDB 支持行级锁,适合高并发查询。
    • MyISAM 支持全文索引,适合文本搜索。

(3) 事务管理

  • 存储引擎决定了是否支持事务以及事务的实现方式。例如:
    • InnoDB 支持事务(ACID 特性),适合需要数据一致性的场景。
    • MyISAM 不支持事务,适合不需要事务支持的场景。

(4) 并发控制

  • 存储引擎决定了如何管理并发访问。例如:
    • InnoDB 支持行级锁,允许多个事务同时访问不同的行。
    • MyISAM 只支持表级锁,并发性能较低。

(5) 数据完整性

  • 存储引擎决定了是否支持外键约束等数据完整性机制。例如:
    • InnoDB 支持外键约束,保证数据的完整性。
    • MyISAM 不支持外键约束。

(6) 性能优化

  • 存储引擎决定了数据库的性能特性。例如:
    • InnoDB 通过缓存(Buffer Pool)和日志(Redo Log、Undo Log)优化读写性能。
    • Memory 存储引擎将数据存储在内存中,读写速度极快。

3. 存储引擎的重要性

存储引擎是数据库的核心组件之一,直接影响数据库的性能、功能和适用场景。选择适合的存储引擎可以:

  • 提高数据库的性能(如查询速度、并发处理能力)。
  • 保证数据的一致性和完整性。
  • 满足特定业务需求(如事务支持、全文搜索)。

4. MySQL中的存储引擎

MySQL 支持多种存储引擎,每种存储引擎都有其特定的使用场景和优缺点。常见的存储引擎包括:

  • InnoDB:支持事务、行级锁、外键约束,适合高并发场景。
  • MyISAM:不支持事务,表级锁,适合读多写少的场景。
  • Memory:数据存储在内存中,读写速度快,适合临时数据存储。
  • Archive:高压缩比,适合存储历史数据。
  • CSV:数据以CSV格式存储,适合数据交互。
  • Blackhole:数据写入后丢弃,适合数据复制中转。
  • Federated:数据存储在远程服务器上,适合跨服务器数据访问。

查看数据库引擎

bash 复制代码
mysql> show engines; -- 表格显示
mysql> show engines \G -- 行显示
*************************** 1. row ***************************
Engine: InnoDB -- 引擎名称
Support: DEFAULT -- 默认引擎
Comment: Supports transactions, row-level locking, and foreign keys -- 描述
Transactions: YES -- 支持事务
XA: YES
Savepoints: YES -- 支持事务保存点
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
******************等等********************

5. 如何选择存储引擎?

选择存储引擎时,需要根据业务需求综合考虑以下因素:

  • 事务支持:是否需要事务(如金融系统)?
  • 并发性能:是否需要高并发处理(如电商系统)?
  • 数据完整性:是否需要外键约束?
  • 存储空间:是否需要高压缩比(如日志系统)?
  • 查询性能:是否需要全文搜索或快速查询?

需要说的是

在MySQL中,存储引擎是为 每张表 单独指定的。这意味着同一个数据库中的不同表可以使用不同的存储引擎。

存储引擎的增查改

在创建一张表是如果没有指定存储引擎,MySQL会默认使用InnoDB存储引擎

创建表时指定存储引擎

bash 复制代码
CREATE TABLE example_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
) ENGINE=InnoDB;

修改表的存储引擎

bash 复制代码
ALTER TABLE example_table ENGINE=MyISAM;

查看标的存储引擎

bash 复制代码
SHOW TABLE STATUS WHERE Name = 'example_table';

6. 总结

存储引擎是数据库管理系统中负责数据存储、检索和管理的核心组件,作用于数据的存储、检索、事务管理、并发控制、数据完整性和性能优化等方面。选择合适的存储引擎对数据库的性能和功能至关重要。

相关推荐
IvorySQL4 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·4 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德4 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫5 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i5 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.5 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn5 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露5 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星5 小时前
sql语言之分组语句group by
java·数据库·sql
符哥20085 小时前
Ubuntu 常用指令集大全(附实操实例)
数据库·ubuntu·postgresql