1.InnoDB 引擎 (MySQL5.5 以后默认使用)
MySQL 5.5 及以后版本中的默认存储引擎, 他的优点如下:
灾难恢复性好
支持事务
使用行级锁
支持外键关联
支持热备份
对于 InnoDB 引擎中的表, 其数据的物理组织形式是簇表 (Cluster Table), 主键索引和数据是在一起的, 数据按主键的顺序物理分布
实现了缓冲管理, 不仅能缓冲索引也能缓冲数据, 并且会自动创建散列索引以加快数据的获取
支持热备份
2.MyISAM 引擎
特性如下:
不支持事务
使用表级锁, 并发性差
主机宕机后, MyISAM 表易损坏, 灾难恢复性不佳
可以配合锁, 实现操作系统下的复制备份, 迁移
只缓存索引, 数据的缓存是利用操作系统缓冲区来实现的. 可能引发过多的系统调用且效率不佳
数据紧凑存储, 因此可获得更小的索引和更快的全表扫描性能
两种存储引擎的大致区别表现在:
1)InnoDB 支持事务, MyISAM 不支持, 这一点是非常之重要. 事务是一种高级的处理方式, 如在一些列增删改中只要哪个出错还可以回滚还原, 而 MyISAM 就不可以了.
2)MyISAM 适合查询以及插入为主的应用, InnoDB 适合频繁修改以及涉及到安全性较高的应用
3)InnoDB 支持外键, MyISAM 不支持
4) 从 MySQL5.5.5 以后, InnoDB 是默认引擎
5)InnoDB 不支持 FULLTEXT 类型的索引
6)InnoDB 中不保存表的行数, 如 select count(*) from table 时, InnoDB 需要扫描一遍整个表来计算有多少行, 但是 MyISAM 只要简单的读出保存好的行数即可. 注意的是, 当 count(*) 语句包含 where 条件时 MyISAM 也需要扫描整个表.
7) 对于自增长的字段, InnoDB 中必须包含只有该字段的索引, 但是在 MyISAM 表中可以和其他字段一起建立联合索引.
8) 清空整个表时, InnoDB 是一行一行的删除, 效率非常慢. MyISAM 则会重建表.
9)InnoDB 支持行锁 (某些情况下还是锁整表, 如 update table set a=1 where user like '%lee%'
有人说 MYISAM 只能用于小型应用, 其实这只是一种偏见.
如果数据量比较大, 这是需要通过升级架构来解决, 比如分表分库, 读写分离, 而不是单纯地依赖存储引擎.
现在一般都是选用 InnoDB 了, 主要是 MyISAM 的全表锁, 读写串行问题, 并发效率锁表, 效率低, MyISAM 对于读写密集型应用一般是不会去选用的.
总之:
1.MyISAM 类型不支持事务处理等高级处理, 而 InnoDB 类型支持.
2.MyISAM 类型的表强调的是性能, 其执行速度比 InnoDB 类型更快, 但是不提供事务支持, 而 InnoDB 提供事务支持已经外部键等高级数据库功能.
来源: http://www.bubuko.com/infodetail-2963061.html