innodb引擎,myisam引擎,memory引擎区别【最新版】

  • Post author:
  • Post category:其他




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引擎:需要很快的读写速度,对数据的安全性要求较低

参考文献:《MySQL性能优化和高可用架构实践》



版权声明:本文为qq_29920751原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。