InnoDB和MyISAM的区别

1.InnoDB支持事务,MyISAM不支持,对于InnoDB来说每一条SQL语句都被封装为事务,事务提供了一个可以从失败中恢复到正常的方法、在异常情况下数据库保持一致性、在多个程序并发访问时提供了隔离的方法,但是事务会影响速度

2.InnoDB支持外键,而MyISAM不支持外键

3.InnoDB是聚簇索引,即索引和数据文件是绑定的,MyISAM是非聚簇索引,即索引和数据文件不是绑定的,索引中存储的是数据文件的地址。二者都是利用B+树来存储索引的。也就是说,对于InnoDB,B+树的叶子节点就是索引所对应的数据,而对于MyISAM,B+树的叶子节点存储的是数据文件的地址。

4.InnoDB不保存表的具体行数,执行select count(*) from table时需要对整个表进行扫描,而MySIAM用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可(不能有where子句)
InnoDB没有这个变量是因为其独有的事务性,在同一时刻表中的行数对于不同的事务来说是不同的。

5.InnoDB必须有主键,而MyISAM可以没有

如何选择
1.如果不需要支持事务,可以考虑MyISAM
2.如果表中绝大多数操作都是读取查询,那么可以考虑MyISAM
3.如果系统崩溃,MyISAM恢复起来比较困难

InnoDB为什么推荐使用自增ID作为主键
自增ID可以保证在插入时B+树的索引是向右边扩展的,可以减少B+树频繁的合并和分裂

借鉴的博客:https://blog.csdn.net/qq_35642036/article/details/82820178

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值