InnoDB与MyISAM存储引擎的对比

InnoDB与MyISAM是MySQL中的两种主要存储引擎,各有优劣。InnoDB支持事务处理、行级锁和外键约束,适合高并发和数据安全性要求高的场景;而MyISAM提供更快的读取速度,适用于数据统计和简单的读写操作,但不支持事务和行锁。在MySQL8.0中,InnoDB默认存储引擎,MyISAM则使用单独的文件存储数据和索引。选择存储引擎需根据业务需求权衡性能与数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、InnoDB的特点

InnoDB的优点:

  1. InnoDB是支持事务的,可以处理大量的短期事务,保证事务的完整提交和回滚
  2. 支持行锁,在支持表锁的情况下支持行锁,锁粒度更小使得并发度更高
  3. 支持外键约束

InnoDB的缺点:

  1. InnoDB在数据写入的效率相对差一些(在插入数据的时候同时在构建B+树,MyISAM则不用)
  2. 对内存的要求较高:因为索引和数据是同时存放在ibd文件中(索引和数据需要同时加载)
  3. 在使用count统计行数的时候,需要使用全表遍历,没有设定一个常量来记录表中的总记录数(因为InnoDB是支持事务的,不同的事务在具体操作的时候行数可能是不一致的,所以难以实现)

二、MyISAM的特点

MyISAM的优点:

  1. 访问速度快,对于select和insert有比较高的响应度
  2. 针对数据统计有额外的常量存储(在select count(*)的时候直接查询一个该变量即可,InnoDB则需要遍历全表才知道有多少数据)

MyISAM的缺点:

  1. 不支持事务(崩溃后无法进行数据恢复)
  2. 不支持外键约束
  3. 不支持行锁,只支持表锁

三、InnoDB与MyISAM的对比

对比项MyISAMInnoDB
外键不支持支持
事务不支持支持
行表锁表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作
缓存只缓存索引,不缓存真实数据不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
自带系统表使用YN
关注点性能:节省资源、消耗少、简单业务事务:并发写、事务、更大资源
默认安装YY
默认使用NY

四、总结(在InnoDB与MyISAM中,不包括其他的存储引擎)

  • 当业务需求中需要保证数据的安全性(支持事务),那么就需要选用InnoDB作为存储引擎
  • 在数据的存储量不大,同时主要的业务是select和insert为主的,那么使用的就是MyISAM存储引擎
  • 在需要处理大量的数据,同时需要对数据进行频繁的更新以及删除操作的,那么使用InnoDB存储引擎
  • 当业务需要满足并发效率高,支持外键等情况下使用InnoDB作为存储引擎

五、扩展

  • InnoDB中底层使用的是聚簇索引,也就是索引和数据是一起存放的
  • 在MyISAM中底层使用的是二级索引,数据和索引分开存放
  • 在MYSQL8.0中InnoDB只有ibd文件用来存放数据,所以和数据是存放在一起的
  • 在MYSQL8.0中MyISAM中使用的是myd文件存放数据,myi文件存放索引,两者分开存储
  • InnoDB是不支持全文索引的,MYISAM则支持,在MYSQL5.7之后InnoDB页支持全文索引
  • 使用InnoDB作为存储引擎一定要有主键(没有则存储引擎会自动的寻找适合的列作为主键或者自动生成一个隐藏字段作为主键),这是因为InnoDB底层是通过B+树进行数据存储的,MyISAM则可以没有主键
  • 为什么在频繁的insert和select操作中MyISAM的效率会更高?因为在InnoDB中需要进行事务的处理和MVCC版本控制,但是在MyISAM则不需要,直接进行并发的插入和查询操作
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值