1.InnoDB支持事务,而MyISAM不支持,因此MyISAM的查询效率比InnoDB高
解决方法:可以取消自动提交事务功能 多条sql放在begin和commit之间组成一个事务
2.虽然多是B+树的结构,但是实现方式不同
InnoDB是聚集索引,MyISAM是非聚集索引
通过聚集索引可以查到需要的数据,而非聚集索引可以先查到对应的主键,再使用主键的值通过聚集索引定位到数据,总之,聚集索引是通往真实数据的唯一途径
3.InnoDB要求必须有主键,如果没有定义主键,那么该表的第一个唯一非空索引做为聚集索引
如果全都没有,innodb内部会生成一个隐藏的主键作为聚集索引,且这个主键会自增,6字节
4.InnoDB支持行锁,MyISAM支持表锁
行锁必须要有索引才能实现,否则会自动锁全表
5.如何选择?
1.支持事务选择InnoDB
2.增删改频繁InnoDB
3.读多写少选MyISAM
6.InnoDB四大特性
1.插入缓冲:提升插入性能
条件:非聚类索引,非唯一索引
先判断插入的非聚类索引页是否在缓冲池中,在就直接插入
不在就先放到Insert Buffer,按照一定的频率进行合并,写回disk,目的是为了减少随机IO带来的性能损耗
2.二次写
3.自适应哈希索引
4.预读
使用两种预读算法提高I/O的性能:线性预读和随机预读
7.为什么InnoDB推荐使用自增ID作为主键?
保证每次插入时B+树索引是从右边扩展的,避免B+树频繁合并和分裂,否则会使得数据随即插入,效率比较差
8.MyISAM支持查询和插入操作的并发进行
通过设置concurrent-insert