概述
MySQL
支持多种存储引擎,每种存储引擎都有其特定的功能和适用场景
InnoDB
概述
InnoDB
表空间tablespace被用于存储表的内容- 提供一组用来记录事务性活动的日志文件
- 用
commit
,savepoint
,以及rollback
支持事务处理 - 提供全部
ACID
兼容 - 在
mysql
服务器崩溃后提供自动恢复 - 多版本(
MVCC
)和行级锁定 - 支持外键和引用的完整性,包括级联更新和删除
特点
- 支持事务:
InnoDB
支持ACID
事务,具有提交、回滚和崩溃恢复能力 - 外键支持:
InnoDB
支持外键约束,能够维护参照完整性 - 行级锁定:
InnoDB
使用行级锁定,提高并发性和性能 - 聚簇索引:数据按主键顺序存储,主键索引是聚簇索引
场景
- 需要事务支持的应用
- 高并发读写操作
- 需要外键约束的应用
1 2 3 4 |
CREATE TABLE example_innodb ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=InnoDB; |
MyISAM
概述
- 是
mysql
数据库最常用的存储引擎 - 可转换压缩只读表来节省空间
- 它使用三个文件表示每个表:
- 格式文件-存储表的结构(
mytable.frm
) - 数据文件-存储表的数据(
mytable.MYD
) - 索引文件-存储表的索引(
mytable.MYI
)
- 格式文件-存储表的结构(
特点
- 不支持事务:
MyISAM
不支持事务 - 表级锁定:
MyISAM
使用表级锁定,写操作会锁定整个表 - 速度快:在读操作多于写操作的场景下,
MyISAM
性能较高 - 全文索引:
MyISAM
支持全文索引,可以用于全文搜索
场景
- 读操作多于写操作的应用
- 需要全文搜索的应用
1 2 3 4 |
CREATE TABLE example_myisam ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=MyISAM; |
Memory
概述
- 以前被称为
HEAP
引擎 - 使用
MEMORY
存储引擎的表,因为数据存储在存储中,且行的长度固定,所以MEMORY
存储引擎非常快 - 使用
MEMORY
存储引擎的表的特征:- 在数据库目录中,每个表均以
.frm
格式文件表示 - 表数据及索引被存储在内存中
- 表级锁机制
- 字段属性不能包含
TEXT
和BLOG
字段
- 在数据库目录中,每个表均以
特点
- 数据存储在内存中:
Memory
存储引擎将数据存储在内存中,读写速度非常快 - 不持久化:服务器重启后,数据会丢失
- 表级锁定:
Memory
使用表级锁定
场景
- 临时数据存储
- 需要快速访问的数据
1 2 3 4 |
CREATE TABLE example_memory ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=MEMORY; |
CSV
特点
- 数据存储在
CSV
文件中:每个表对应一个CSV
文件 - 易于导入导出:适合将数据导入导出到其他系统
- 不支持索引和事务:
CSV
存储引擎不支持索引和事务
场景
- 数据交换和导入导出
- 需要简单存储格式的数据
1 2 3 4 |
CREATE TABLE example_csv ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=CSV; |
Archive
特点
- 主要用于存档:
Archive
存储引擎适合存储大批量的插入和极少量的查询操作 - 高压缩比:数据存储时会进行压缩
- 只支持
INSERT
和SELECT
:不支持DELETE
和UPDATE
操作
场景
- 数据归档和日志存储
- 需要高压缩比的历史数据存储
1 2 3 4 |
CREATE TABLE example_archive ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=ARCHIVE; |
Federated
特点
- 访问远程表:
Federated
存储引擎允许访问远程MySQL
服务器上的表 - 无数据存储:本地服务器不存储数据,所有数据都存储在远程服务器上
场景
- 需要访问和操作远程
MySQL
服务器上的表
1 2 3 4 |
CREATE TABLE example_federated ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=FEDERATED CONNECTION='mysql://user:password@remote_host:3306/database/table'; |
NDB (Clustered)
特点
- 分布式数据库:NDB存储引擎用于MySQL Cluster,支持分布式数据库架构
- 高可用性:支持高可用性和自动故障转移
- 高并发:支持高并发读写操作
场景
- 需要高可用性和高并发的分布式应用
1 2 3 4 |
CREATE TABLE example_ndb ( id INT PRIMARY KEY, name VARCHAR(255) ) ENGINE=NDBCLUSTER; |
操作
默认引擎
- 默认的存储引擎可以在
my.ini
配置文件中使用default-storage-engin
选项指定 - 可以通过
alter table 表名 engine = 存储引擎名称;
修改表的存储引擎
查看表的引擎
1 2 3 4 5 |
//查看muysql所有的存储引擎 show engines; //查看某张表所使用的存储引擎 show create table t_student; show table status like 't_student'; |
1 |
SHOW TABLE STATUS LIKE 'table_name'; |
问题
- 可以对每一个表指定特定的引擎吗?
- 在
MySQL
中,您可以为每一个表指定特定的存储引擎 - 这使得您可以根据不同表的需求选择最合适的存储引擎,以优化性能和功能
- 在
总结
- InnoDB:
- 适合需要事务支持、高并发和外键约束的应用
- MyISAM:
- 适合读操作多于写操作、需要全文搜索的应用
- Memory:
- 适合临时数据存储、需要快速访问的数据
- CSV:
- 适合数据交换和导入导出
- Archive:
- 适合数据归档和日志存储
- Federated:
- 适合访问和操作远程MySQL服务器上的表
- NDB:
- 适合需要高可用性和高并发的分布式应用
本文为原创文章,版权归Aet所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 事务_介绍 && 事务隔离11/01
- ♥ 视图10/28
- ♥ 连接查询-笛卡尔积 || 连接方式10/25
- ♥ 表_修改表结构10/26
- ♥ 表_创建 && 操作10/26
- ♥ 连接查询-子查询10/26