MySQL 存储引擎
MySQL中的数据用各种不同的技术存储在文件系统中,每一种技术都使用不同的存储机制、索引技巧,锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在MySQL中称为存储引擎。
存储引擎就是MySQL 讲数据存储在文件系统中的存储方式或者存储格式目前MySQL 常用的两种存储引擎:MyISAM、InnoDB
MySQL 存储引擎是MySQL 数据库服务器中的组件,负责为数据库执行实际的数据I/O操作,使用特殊存储引擎的主要优点之一在于,仅需提供特殊应用所需的特性,数据库中的系统开销较小,具有更有效和更高的数据库性能。MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储。
存储引擎分类
mermaid
graph TD
A[存储引擎] --> B[事务型]
A --> C[非事务型]
B --> D[InnoDB]
B --> E[NDB Cluster]
C --> F[MyISAM]
C --> G[MEMORY]
C --> H[ARCHIVE]InnoDB
MySQL 5.7+是MySQL的默认存储引擎
- 支持ACID事务(隔离级别可配置)
- 行级锁定(MVCC实现并发控制)
- 外键约束支持
- 崩溃恢复能力(WAL日志机制)
- 聚簇索引组织表
MyISAM
典型场景:
- 只读/读密集型操作
- 数据仓库应用
- 需要全文索引(MySQL 5.6前)
局限性:
- 表级锁定(并发性能差)
- 无事务支持
- 崩溃后恢复困难
- 不支持外键
MEMORY引擎
- 数据存储在内存中
- 临时表/高速缓存场景
- 服务器重启后数据丢失
ARCHIVE引擎
- 高压缩比(约10:1)
- 只支持INSERT/SELECT
- 适合日志归档
NDB Cluster引擎
- 分布式内存数据库
- 99.999%高可用性
- 实时性要求高的场景
InnoDB与MyISAM 对比
| 特性 | InnoDB | MyISAM |
|---|---|---|
| 事务支持 | 完整ACID事务 | 不支持 |
| 锁机制 | 行级锁、MVCC | 表级锁 |
| 外键 | 支持 | 不支持 |
| 崩溃恢复 | 自动恢复(Redo/Undo) | 手动修复 |
| 索引结构 | 聚簇索引 | 非聚簇索引 |
| COUNT(*) | 需扫描表 | 缓存计数 |
| 全文索引 | 5.6+支持 | 原生支持 |
| 存储文件 | .ibd表空间 | .frm、.MYD、.MYI |
| 压缩 | 表压缩 | 行/列压缩 |
| 缓存 | 数据+索引 | 仅索引 |
| 典型场景 | OLTP、金融系统 | 数据仓库、日志系统 |
查看存储引擎信息
sql
-- 查看MySQL支持的存储引擎
SHOW ENGINES;
-- 查看当前默认存储引擎
SHOW VARIABLES LIKE 'default_storage_engine';
SELECT @@default_storage_engine;
-- 查看表当前引擎
SHOW TABLE STATUS LIKE 'table_name';
-- 转换引擎(重建表)
ALTER TABLE myisam_table ENGINE = InnoDB;设置存储引擎
设置服务器默认存储引擎
修改MySQL配置文件my.cnf/my.ini:
ini
[mysqld]
default-storage-engine=InnoDB重启MySQL服务生效。
会话级别临时修改
sql
SET default_storage_engine=InnoDB;创建表时指定引擎
sql
CREATE TABLE 表名 (
列定义...
) ENGINE=InnoDB;修改已有表的存储引擎
sql
ALTER TABLE 表名 ENGINE=InnoDB;存储引擎配置参数
InnoDB关键配置
ini
# InnoDB缓冲池大小(建议物理内存的50-70%)
innodb_buffer_pool_size = 4G
# 日志文件大小(建议512MB-2GB)
innodb_log_file_size = 1G
# 日志缓冲区大小
innodb_log_buffer_size = 16M
# 刷新方法(建议O_DIRECT)
innodb_flush_method = O_DIRECT
# 并发线程数
innodb_thread_concurrency = 0MyISAM关键配置
ini
# 索引缓冲区大小
key_buffer_size = 256M
# 并发插入设置
concurrent_insert = 2
# 修复表选项
myisam-recover-options = BACKUP,FORCE