0.数据库总体图片:
1.两者的差别
- 1)InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语句都默认封装成事务进行提交,这样就会影响速度,优化速度的方式是将多条 SQL 语句放在 begin 和 commit 之间,组成一个事务;
- 2)InnoDB 支持外键,而 MyISAM 不支持。
- 3)MyISAM 中 B+ 树的数据结构存储的内容是实际数据的地址值,它的索引和实际数据是分开的,只不过使用索引指向了实际数据。这种索引的模式被称为非聚集索引。
- 4)InnoDB 中 B+ 树的数据结构中存储的都是实际的数据,这种索引有被称为聚集索引。
- 5)InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁
2.相同点
- 1)两种引擎所使用的索引的数据结构都是B+树
- 2)
3.MyISAM
-
1)数据结构
-
2)MyISAM 中索引检索的算法为首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,则取出其 data 域的值,然后以 data 域的值为地址,读取相应数据记录。
4.InnoDB
-
1)数据结构
-
2)补充
由于 InnoDB 利用的数据库主键作为索引 Key,所以 InnoDB 数据表文件本身就是主索引,且因为 InnoDB 数据文件需要按照主键聚集,所以使用 InnoDB 作为数据引擎的表需要有个主键,如果没有显式指定的话 MySQL 会尝试自动选择一个可以唯一标识数据的列作为主键,如果无法找到,则会生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
5.如何选择
- 1.是否要支持事务,如果要请选择 InnoDB,如果不需要可以考虑 MyISAM;
- 2.如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用InnoDB。
- 3.系统奔溃后,MyISAM恢复起来更困难,能否接受,不能接受就选 InnoDB;