Mysql MYISAM与Innodb区别

一、存储结构

  每个myisam的表在磁盘空间上有三个文件,表定义文件(.frm),数据文件(.MYD),索引文件(MYI)
Innodb:所有表都存储在同一个数据文件(也可能是多个,或者独立的表空间)

二、存储空间

  MYISAM:可被压缩,存储空间较小。
  Innodb:需要更多的内存和存储,会在主内存建立其专用的缓冲池用于高速缓冲数据和索引。
  MYISAM的索引是和数据分开的,并且是可压缩的,内存使用率对应的提高了不少,二Innodb是索引和数据紧密
  捆绑的,没有使用压缩从而造成Innodb比MYISAM体积庞大不少

三、事务处理

  MYISAM类型的表强调的是性能,其执行速度比Innodb要快得多,但是不支持外键,不提供事务支持。
  Innodb提供事务支持事务,外键等高级数据库功能。

四、CURD

  如果执行大量的SELECT操作,MYISAM是更好的选择
  如果是UPDATE,INSERT出于性能考虑,Innodb是更好的选择
  DELETE操作时Innod不会重新建立表,而是一行一行的删除。而MYISAM则是重新建立表。

五、AUTO_INCREMENT

  MYISAM:可以和其它字段一起建立联合索引。引擎自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以通过前面几列排序后递增。
  Innodb必须包含该只有该字段的索引。引擎自动递增必须是索引,如果是组合索引也必须是组合索引第一列。

六、表的具体函数

  MYISAM:保存表的总行数,如果select count(*) from table直接取出该值
  Innodb:没有保存表的总行数,如果select count(*) from table就会遍历整个表,消耗会相当的大,但是在
加了where后MYISAM和Innodb处理方式都一样

七、全文索引

  MYISAM:支持全文索引(fuultext)。不支持中文
  Innodb:不支持全文索引(fulltext)。但Innodb可以使用sphinx插件支持全文索引,并且效果更佳

八、表锁差异

  MYISAM:支持表锁。
  Innodb:支持事务和行锁,是Innodb最大特色。行锁大幅度提高了多用户的并发操作性能,但是Innodb的
行锁不是绝对的,行锁只在where主键是有效的非主键where都会进行表锁

你可能感兴趣的:(mysql)