InnoDB存储引擎和MyISAM存储引擎有什么区别?

InnoDB存储引擎和MyISAM存储引擎有什么区别?
一、InnoDB和MyISAM介绍
  • MySQL5.5.5版本之后,默认采用InnoDB存储引擎 。 InnoDB是MySQL的默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
  • MyISAM 是 MySQL5.5.5版本之前默认的存储引擎。但它不支持事务行级锁外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复 。优势是访问的速度快 ,对事务完整性没有要求或者以SELECT为主的应用。

主要区别

对比项InnoDBMyISAM
事务支持不支持
外键支持不支持
行级锁,操作时只锁某一行,不对其它行有影响, 适合高并发的操作表级锁,即使操作一条记录也会锁住 整个表,不适合高并发的操作
可恢复性可以根据事务日志进行恢复不可恢复
表结构数据和索引集中存储。
①数据和索引存放在.ibd文件中
②表结构存放在.frm文件中
③MySQL8.0后,表结构和数据、索引均存放在.ibd文件中
数据和索引是分开存储的。
①数据存放在.MYD文件中,
②索引存放在.MYI文件中
③表结构存放在.frm文件中
④MySQL8.0后,表结构更该存放在.sdi文件中
性能执行大量的INSERTDELETEUPDATE,性能优于MyISAM执行大量的SELECT,性能优于InnoDB
二、开发中,两者如何选择?
  1. 由于MySQL5.5.5版本后,默认的存储引擎就是InnoDB,所以在无特殊要求的情况下,默认使用InnoDB存储引擎即可。

  2. 如果在开发中,在面对高并发场景下,对事务要求特别严格,那么就必须选择InnoDB存储引擎。

  3. 如果在开发中,在只读应用或者在多读写少的业务场景下,对事务不做严格要求,可以选择MyISAM存储引擎,比如日志表。

三、常见面试题
1、InnoDB存储引擎和MyISAM存储引擎有什么区别?

答:

  • InnoDB存储引擎支持事务外键行级锁,MyISAM不支持,MyISAM只支持表级锁

  • 在数据文件存储上,InnoDB存储引擎的数据和索引集中存储,均存放在ibd文件中,MyISAM存储引擎的数据和索引是分开存储的,数据存放在MYD文件中,索引存放在MYI文件中;

  • 使用select count(*) from table 查询表中具体行数时,由于MyISAM存储引擎维护了一个row_count字段用于记录表中的条目数,所以MyISAM存储引擎的效率要高于InnoDB存储引擎,InnoDB必须采用全表扫描的方式来计算结果

    思考:为什么InnoDB存储引擎没有维护这个字段?

2、在开发中,选择InnoDB存储引擎还是MyISAM存储引擎?

答:略

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值