区别
-
1.InnoDB 支持事务,MyISAM 不支持事务。MyLSAM强调的是性能,执行速度更快,如果需要大量的SELECT操作,可以选用M有ISAM表,而InnoDB数据库功能更为高级,如果数据要执行大量的INSERT或UPDATE操作,应该使用InnoDB表
-
2.MyISAM支持全文索引,InnoDB不支持全文索引(MySQL5.6之后的版本,InnoDB也支持全文索引)。
(全文索引可能存在精度问题,但在大量的数据面前,检索速度相较常规检索快很多) -
3.InnoDB 支持外键,MyISAM 不支持外键。如果对一个包含外键的 InnoDB 表转为 MYISAM 表会失败;
-
4.由于InnoDB支持行级锁定,这意味着与MyISAM相比,插入和更新要快得多。而在MyISAM中,MyISAM具有表级锁定,行级锁定和关系完整性是不可能的,一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。
-
5.InnoDB不会将数据保存为表级别,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
-
6.InnoDB支持ACID(原子性,一致性,隔离性和耐久性)属性,而MyISAM不支持。
-
7.在InnoDB表中,AUTO_INCREMENT(自增)字段是索引的一部分。但是在MyISAM中,也可以将该字段和其他字段一起建立联合索引。
-
8.InnoDB中的表一旦删除,便无法重新建立,而是一行一行的删除。因此速度非常慢。推荐使用truncate table,不过需要用户有drop此表的权限。
-
9.MyISAM崩溃后无法安全恢复,InnoDB拥有一套完善的崩溃恢复机制,能在崩溃后正常恢复。
-
10.MyISAM将索引和数据分开进行存储。索引存放在.MYI文件中,数据存放在.MYD文件中。索引中保存了相应数据的地址。以表名+.MYI文件分别保存。 InnoDB的主键索引树的叶子节点保存主键和相应的数据。其它的索引树的叶子节点保存的是主键。因此,InnoDB必须要有主键.
综上可以看出,除非小型项目,追求查询性能等,选择InnoDB不会错.