美文网首页
InnoDB 和MyISAM的区别

InnoDB 和MyISAM的区别

作者: 十年磨一剑1111 | 来源:发表于2020-01-11 15:14 被阅读0次

    使用MySQL 数据库的小伙伴们想必在面试的时候经常会被问到Innodb和MyISAM 这两种存储引擎的区别,因为这两种存储引擎是我们经常使用的,接下来我将针对一些比较常用的问题做下总结:

    1. 如果你的业务数据一直性要求比较高,建表的时候你会选择使用哪种存储引擎?
      答:InnoDB

    这个问题相信绝大多数人都会回答正确,因为我们知道InnoDB支持事务而MyISAM不支持事务

    1. InnoDB为什么支持事务?
      答:是通过日志(log) 和锁来实现的。

    这个问题估计一半的人都不太了解吧,我们知道事务有4个属性:原子性,一致性,隔离性,持久性 ,也就是我们经常说的ACID,其中 ACD 是通过日志(log)来实现,隔离性是通过锁来实现的,具体的实现方式请关注后续文章。

    3.如果业务数据量比较大,你会选择使用哪种存储引擎,为什么?
    答:InnoDb,我们知道InnoDB 默认支持行锁,而MyISAM不支持行锁的,InnoDB 锁粒度更小,能支持更大的并发量,当然,锁的粒度越小意味着开销也是越大的,而MyISAM 只支持表锁,也就是如果有个写(insert,update) 操作的时候就会锁住整个表,这会导致其他的都和写操作阻塞,如果并发量大的话就会造成严重的阻塞,因此,实践总结:当我们业务数据量大的时候我们选择InnoDB引擎,当我们的表主要以查询为主时我们选用MyISAM。

    4.如果一张表没有设置主键会怎样?
    答:一般我们会为每张表设置一个自增主键,如果表使用的时MyISAM存储引擎,没有设置主键影响不大,如果表的InnoDB存储引擎则会影响性能,因为InnoDB 在没有主键或者一个唯一的索引的时候会以一个包含行ID值的合成列生成一个隐藏的聚簇索引,长度为6字节,这个生成的列是共享的,也就是所有没有主键的表都共享这个聚簇索引,可想而知是会影响性能的。

    相关文章

      网友评论

          本文标题:InnoDB 和MyISAM的区别

          本文链接:https://www.haomeiwen.com/subject/paavactx.html