MyISAM和InnoDB的区别

应用层的区别:

1,MyISAM不支持外键,InnoDB支持,这是非关系型和关系型数据库的最大区别

2,MyISAM不支持事务,InnoDB支持

3,MyISAM不支持行锁,InnoDB支持,InnoDB也会退化为表锁

4,MyISAM支持全文索引,InnoDB不支持(5.7版本后支持)

5,MyISAM可以没有主键,InnoDB必须有(不设会内置)

 

设计层的区别:

1,先讲概念,什么是聚簇索引和非聚簇索引

1.1,聚簇索引:主键索引的叶子节点存储主键值;

1.2,非聚簇索引:主键索引的叶子节点不存储主键值,仅存主键值的地址;

仅考虑算法层面的话,从聚簇索引中获取数据通常比在非聚簇索引中查找要快。

 

2,MyISAM和InnoDB索引都采用B+树结构(这里不讨论hash),区别在于

2.1,MyISAM主键索引是非聚簇索引;

2.2,InnoDB主键索引是聚簇索引;

2.3,InnoDB普通索引(二级索引)是非聚簇索引;

 

3,数据存储方式的不同,如下图

3.1,MyISAM索引文件和数据文件是分离的(.myi索引文件和.myd数据文件)

3.2,InnoDB的数据文件按主键聚集(.idb数据文件)

 

4,为什么MyISAM查询更快?

4.1,InnoDB要缓存数据块,MyISAM只缓存索引,加载索引可能更快

4.2,InnoDB寻址先到块再到行,MyISAM直接寻址到文件offset

4.3,InnoDB要维护MVCC一致

 

总结:读多写少且不需要关联查询、事务,可以考虑用MyISAM。不然还是建议用InnoDB。

 

原文出自:https://blog.csdn.net/daiyudong2020/article/details/104468714

 

end

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值