InnoDB 引擎:具备外键支持功能的事务存储引擎
- InnoDB是MySql默认的事务型引擎,他被设计用来处理大量短期的事务,可以确保事务的完整提交(Commit)和回滚(Rollback)。
- 除了增加和查询外,还需要更新、删除操作,那么优先选择InnoDB存储引擎
- 对比MyISAM的储存引擎,InnoDB写的效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
- MyISAM:只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实的数据,对内存要求较高,而且内存对性能有决定性的影响
MyISAM 引擎:主要的非事务处理储存引擎
- MyISAM 提供了大量的特性,包括全文索引、压缩、空间函数等,但是MyISAM 不支持事务,行级锁、外键 那么毫无疑问他在面临崩盘的时候他的数据是无法安全恢复的。
- 优势是 访问时快速的,对事务的完整性没有要求
- 针对统计数据有额外的常数储存,故而count(*)他的查询速度是很快的
- 业务应用场景:只读应用或者以读为主的业务
对比项 | MyISAM | InnoDB |
---|
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,那么在这种情况下,很明显他不适合高并发的场景 | 行锁,操作时只锁住某一行,不对其他行有影响,适合高并发的场景 |
缓存 | 只缓存索引,并不缓存数据 | 不仅缓存索引还要缓存真实数据,对内存要求是比较高的,而且对性能的要求是比较高的 |
自带系统表使用 | Y | N |
关注点 | 性能:节约资源、简单业务 | 事务:并发写、事务、资源 |
默认安装 | Y | Y |
默认使用 | N | Y |
Archive 引擎:用于数据存档
- archive 是归档的意思,仅仅支持插入和查询的俩种功能(行插入之后那么久不能修改了)
- 拥有很好的压缩机制,使用zlib压缩库,在记录请求的时候进行压缩,经常被用作仓库使用
- 拥有很高的插入速度,但是查询较差
Blackhole 引擎:丢弃写操作,读操作会返回空内容
- Balckhole引擎没有实现任何储存机制,他会丢弃所有插入的数据,补做任何的保存
CSV引擎:储存数据的时候,逗号分隔各个数据项
- CSV 引擎可以将普通的CSV文件作为MySql 表来处理 但是不支持索引
- CSV 引擎可以作为一种数据交换的机制 非常有用
- 对于数据的快速导入,导出是有明显的优势的
create table csv_domain (id int not null, name varchar(50) not null ) engine = csv;
show create table csv_domain;
insert into csv_domain(id, name) values (1, 'domain');
insert into csv_domain(id, name) values (2, 'mysql');
Menory 引擎:置于内存的表
Memory 采用的逻辑介质是内存,响应速度很快,但是当mysql守护进程奔溃的时候对于数据来说 我的数据那么就会丢失,另外我需要要求储存的数据结构是不变的格式。
主要特征:
- Memory同时支持 哈希索引 和 B+ 树索引
- Menpry表至少比MyISAM表要快一个数量级
- 数据文件和索引文件分开存储
- 生命周期短,基于这个缺陷选择Memory存储引擎的时候需要特别的小心
Federted 引擎:访问远程表
Merge 引擎:管理多个MyISAM表集合
NDB 引擎:Mysql集群专用储存引擎