MySQL数据库里面InnoDB与MyISAM的对比区别

InnoDB与MyISAM的六大区别

1. 构成上的区别
MyISAM 每个MyISAM在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩 展名为.MYD (MYData)。索引文件的扩 展名是.MYI (MYIndex)。
InnoDB 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB

2. 事务处理上方面
MyISAM MyISAM类型的表强调的是性能,其执行速度比InnoDB类型更快,但是不提供事务支持
InnoDB InnoDB提供事务支持事务,外部键等高级 数据库功能

3. SELECT UPDATE,INSERT,Delete操作
MyISAM 如果执行大量的SELECT,MyISAM是更好的选择
InnoDB 1. 如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表 2. DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的 删除。3. LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用

4. 对AUTO_INCREMENT的 操作
MyISAM 每表一个AUTO_INCREMEN列的内部处理。MyISAM为INSERT和UPDATE操 作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列, 可以出现重使用从序列顶部删除的值的情况)。AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置; 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但 是在MyISAM表中,可以和其他字段一起建立联 合索引更好和更快的auto_increment处理
InnoDB 如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数 器的计数器,它被用在为该列赋新值。自动增长计数 器仅被存储在主内存中,而不是存在磁盘上,关于该计算器 的算法实现,请参考AUTO_INCREMENT列 在InnoDB里 如何工作

5. 表的具体行数
MyISAM select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的
InnoDB InnoDB中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行

6.
MyISAM 表锁
InnoDB 提供行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执 行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”
标签: InnoDB,MyISAM