MySQL的存储引擎
MySQL存储引擎介绍
视图
存储过程
触发器
MySQL自带的存储引擎
show engines;
*************************** 1. row ***************************
# InnoDB 是 MySQL 的默认存储引擎,广泛用于支持事务和高并发的场景。
特点:
事务支持: InnoDB 完全支持 ACID 事务(原子性、一致性、隔离性、持久性),提供了高可靠性。
外键支持: InnoDB 支持外键约束,可以保证数据的引用完整性。
行级锁定: 使用行级锁定而不是表级锁定,有助于在高并发环境下提高性能。
崩溃恢复: 支持自动崩溃恢复,利用重做日志(redo log)来保证数据一致性。
表空间管理: 数据存储在表空间(tablespace)中,可以支持非常大的表。
使用场景:
需要事务处理的应用程序(如银行、金融系统)。
需要复杂的关系约束和高并发访问的系统。
*************************** 2. row ***************************
# MyISAM 是 MySQL 的一个老牌存储引擎,它不支持事务,但在只读或读多写少的场景中性能较好。
特点:
非事务性: MyISAM 不支持事务处理,因此在数据安全性和一致性上不如 InnoDB。
表级锁定: MyISAM 使用表级锁定,即每次操作会锁定整个表,适用于只读操作较多的场景。
存储格式: 数据、索引、表定义分别存储在 .MYD、.MYI、.frm 文件中。
快速查询: MyISAM 在没有大量写操作的情况下,查询性能通常较好。
全文索引: MyISAM 提供对全文索引的支持,适合需要全文搜索的应用。
使用场景:
读多写少的应用,如报表、日志系统。
不需要事务的场景。
需要全文搜索的应用。
*************************** 3. row ***************************
# MEMORY 存储引擎将数据存储在内存中,因此读写速度非常快,但数据是临时的,会随着服务器的关闭而消失。
特点:
内存存储: 数据完全存储在内存中,因此访问速度非常快。
非持久化: 数据在服务器关闭时会丢失,适合存储临时数据。
表级锁定: 使用表级锁定,适合短暂的快速访问操作。
固定长度行: MEMORY 表只支持固定长度的行,不支持 BLOB 和 TEXT 类型。
使用场景:
临时数据存储,如会话管理、缓存。
需要快速访问和频繁更新的小型数据集。
*************************** 4. row ***************************
# CSV 存储引擎将数据存储为逗号分隔值(CSV)格式的文本文件,适合于导入和导出数据。
特点:
文本存储: 数据存储在 CSV 格式的文本文件中,每个表对应一个 .CSV 文件。
无索引: CSV 表不支持索引,所有查询都是全表扫描。
轻量级: 适合小规模数据的存储和传输,不支持复杂的 SQL 特性。
使用场景:
数据的简单导入和导出。
与其他系统交换数据的中间存储。
*************************** 5. row ***************************
# ARCHIVE 存储引擎适用于存储大量的历史数据,提供了高压缩比,但只支持插入和查询操作,不支持更新和删除。
特点:
高压缩比: 数据存储时会被压缩,适合存储大量的历史数据。
只插入和查询: 只支持插入和查询,不支持更新和删除。
不支持索引: 只支持主键索引,无法进行快速搜索。
使用场景:
日志记录,历史数据归档。
需要高压缩比且不需要频繁访问的场景。
*************************** 6. row ***************************
# NDB Cluster 是一种分布式存储引擎,主要用于 MySQL Cluster 环境中,支持高可用性和数据冗余。
特点:
分布式存储: 数据分布在多个节点上,提供高可用性和冗余。
自动分片: 数据自动在多个节点间分片。
内存中数据处理: 提供内存中数据处理,快速响应查询请求。
使用场景:
分布式、高可用性场景,如电信系统、在线游戏、支付系统。
*************************** 7. row ***************************
# MERGE 存储引擎可以将多个 MyISAM 表合并为一个虚拟表,对合并后的表进行统一查询和操作。
特点:
虚拟表: 将多个 MyISAM 表组合为一个虚拟表,统一查询。
分区数据: 适合将大表分为多个子表,按需查询子表数据。
使用场景:
需要对多个相同结构的 MyISAM 表进行统一操作时。
按时间分区存储数据。
*************************** 8. row ***************************
# FEDERATED 存储引擎允许在本地 MySQL 服务器上创建一个指向远程 MySQL 服务器表的链接,类似于数据库链接。
特点:
跨服务器访问: 允许在本地服务器上查询远程 MySQL 服务器的数据。
无数据存储: 本地表不存储数据,只是指向远程表的链接。
使用场景:
跨服务器的数据访问和查询。
统一管理分布在不同 MySQL 实例上的数据。
*************************** 9. row ***************************
BLACKHOLE 存储引擎的所有插入操作都会被丢弃,不会存储任何数据,通常用于日志记录或数据复制。
特点:
数据丢弃: 所有插入的数据都会被丢弃,表中不会存储任何数据。
复制功能: 常用于数据复制的场景,可以记录日志但不存储实际数据。
使用场景:
数据复制场景中,作为中转表。
日志记录,但不存储数据。
### 查询那些表是innodb的
select * from information_schema.tables where engine='innodb'\G
## 查看MySQL数据库中哪些表是myisam的
select * from information_schema.tables where engine='myisam'\G
Innodb和myisam的区别
物理区别
## MyIsam数据文件 frm = format
user.frm
user.MYD
user.MYI
## Innodb数据文件 frm = format
slave_master_info.frm
slave_master_info.ibd
逻辑区别
Innodb存储引擎的功能
MVCC
事务
行级锁
热备份
Crash Safe Recovery(自动故障恢复)
MVCC 是 InnoDB 中的一种重要机制,它通过维护数据行的多个版本来实现事务隔离和高效的并发处理。对于大多数应用场景,MVCC 提供了良好的性能和数据一致性,尤其是在高并发读写场景下。
设置存储引擎
#### 配置文件
[mysqld]
default-storage-engine=<Storage Engine>
#### 临时设置
set @@storage_engine=<Storage Engine>;
#### 建表指定
CREATE TABLE t (i INT) ENGINE = <Storage Engine>;