关于Mysql 存储引擎 MyISAM 和 InnoDB 的区别

一. 事务区别

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

这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。

二. 外键区别

InnoDB 支持外键,而 MyISAM 不支持。

对一个包含外键的 InnoDB 表转为 MYISAM 会失败。

三. 索引数据结构区别

1. InnoDB 是聚集索引

聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

2. MyISAM 是非聚集索引

非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

四. select count(*) 性能区别

InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,性能是毫秒级。

五. 最小粒度锁区别

InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL自5.5版本后将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一。

六. Mysql存储引擎选择,抉择因素

1. 事务性需求选InnoDB

是否要支持事务,如果要请选择 InnoDB,如果不需要可以考虑 MyISAM.

2. 读多写少场景选MyISAM

如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用InnoDB。

七. 总结

系统奔溃后,MyISAM恢复起来会更困难,看自身能否接受,若不能接受就选 InnoDB。毕竟,MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的。如果你实在不知道用什么存储引擎,就用默认的InnoDB吧,性能也不会很糟糕。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙殿殿主

你的打赏是我精心创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值