存储引擎的概念
数据库管理系统DBMS可以对数据库进行增删改查的操作,其中底层使用的就是数据库的存储引擎机制,不同的存储引擎提供不同的存储机制、索引机制、锁定水平,是否使用事务和其他特定功能,默认情况下创建新表会有默认的存储引擎MyISAM。
存储引擎主要有4个:MyIASM、InnoDB、Memory、Merge;
MyISAM
1、MyISAM默认的存储引擎,使用的是表级别锁,每个MyISAM创建后会生成三个文件,分别是.frm(存储表定义) .myd(存储数据) .myi(存储引擎)
2、优势:访问速度快,对事务完整性没有要求,select,inesrt为主的选择密集型表都可以使用这个引擎
3、缺点:不支持事务,不支持外键
设计简单,数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,则依然可以使用它。
提供了大量的特性,包括压缩表、空间数据索引等。
可以手工或者自动执行检查和修复操作,但是和事务恢复以及崩溃恢复不同,可能导致一些数据丢失,而且修复操作是非常慢的。
InnoDB
1、InnoDB是一种事务型存储引擎,使用的行级别锁,支持外键
2、适用的场合:
- 更新密集型表
- 事务
- 外键约束表
- 支持自动增加列auto_increment
InnoDB是 MySQL 默认的事务型存储引擎,只有在需要它不支持的特性时,才考虑使用其它存储引擎。
实现了四个标准的隔离级别,默认级别是可重复读(REPEATABLE READ)。在可重复读隔离级别下,通过多版本并发控制(MVCC)+ 间隙锁(Next-Key Locking)防止幻影读。
主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很大的提升。
MyISAM和InnoDB比较
事务:InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。
并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。
外键:MyISAM不支持,而InnoDB支持
备份:InnoDB 支持在线热备份。
崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。
Memory
memory存储引擎使用存在内存中的内容创建表,每个memory表只实际对应一个磁盘文件.frm ,memory类型的表访问非常快,因为数据是放在内存中的,默认使用的是hash索引,一旦服务关闭,数据就会丢失
应用场景:
- 目标数据比较小,并且被经常访问的表。
- 如果数据是临时的,要求必须立即使用
- 存储在memory表中的数据突然丢失,不会对应用服务造成实质性影响
Merge
Merge存储引擎就是MyISAM存储引擎的聚合,这些操作其实就是对MyISAM表的操作
应用场景:对于服务器日志信息,需要将数据分为多表。例如12个相同的日志表记录不同月份的服务器数据,之前可能需要多表的查询,目前采用Merge存储引擎,将12个表合并一起使用一条查询,之后再删除Merge表。