innodb引擎
- .frm 表结构文件 .idb 数据和索引文件
- innodb 引擎执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,累积计数
- 事务型数据库首选,支持事务ACID
- 支持行级锁,最大程度上支持并发,类似Oracle的一致性读、多用户并发
- innodb是为处理巨大数据量的最大性能设计,innodb存储引擎完全与MySQL服务器整合,innodb存储引擎为在主内存中缓存数据和索引而维持自己的缓冲池
- innodb支持外键完整性约束,存储表中的数据时,每张表的存储都按照主键顺序存放,如果没有显式在表定义时指定主键,innodb会为每一行生成一个6字节的rowid作为主键
- innodb支持崩溃数据自修复,innodb储存引擎中就是依靠redo log来保证的,当数据库异常崩溃后,数据库重启时会根据redo log进行数据恢复,保证数据库恢复到崩溃前的状态
myisam引擎
- .frm 表结构文件 .myd 数据文件 .myi 索引文件
- myisam引擎执行 count(*)把一个表的总行数存在了磁盘上,直接返回这个数,效率很高
- 不支持事务,对事务有要求的业务场景不能使用
- 支持表级锁,让锁的实现成本很小,降低了其并发性能
- 不仅会在写入的时候阻塞读取,还会在读取的时候阻塞写入 ,但读本身并不会阻塞另外的读
- 只会缓存索引:myisam可以通过key_buffer缓存,提高访问性能减少磁盘IO,但是这个缓冲区只会缓存索引,不会缓存数据
- 适用于不需要事物支持,并发相对较低(锁机制问题),数据修改相对较少(阻塞问题),以读为主的场景
memory引擎
memory引擎是mysql中一类特殊的存储引擎,使用引擎在内存中的内容来创建表,所有数据存放在内存中
- memory存储引擎的表实际对应一个磁盘文件,该文件的文件名与表名相同,.frm类型;该文件中只存储表结构,数据文件存储在文件中
- memory引擎默认使用hash索引,速度比b+树索引快,如果想用b+树索引可在创建索引时指定
- memory引擎是把数据存到内存中,如果内存出现异常就会影响数据,如果重启或关机,那么所有数据都会消失
总结
- innodb引擎: 需要对事务的完整性要求比较高(如银行|订单|支付),要实现并发控制(如售票)
- myisam引擎:主要用于插入记录和读取数据(如用户登录日志)
- memory引擎:需要很快的读写速度,对数据的安全性要求较低