MySQL中InnoDB和MyISAM区别

InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID.如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。MyISAM管理非事务表,提供高速存储和检索,以及全文搜索能力,如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

MySQL中InnoDB和MyISAM区别
MySQL中InnoDB和MyISAM区别
1、事务和外键

InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID.如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

MyISAM管理非事务表,提供高速存储和检索,以及全文搜索能力,如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

2、全文索引

InnoDB不支持全文索引,如果一定要,最好使用sphinx等搜索引擎。

MyISAM对中文支持的不是很好,新版的InnoDB已经支持了

3、锁

MySQL支持三种锁定级别,行级,页级,表级;

MyISAM支持表级锁定,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MyISAM不能确定要扫描的范围,InnoDB表同样会锁全表,

例如

UPDATE table SET num=1 WHERE name LIKE '%aaa%'
4、存储

MyISAM在磁盘上存储成三个文件,第一个文件的名字以表的名字开始,扩展名指出文件类型,.frm文件存储表定义,数据文件扩展名为.MYD,索引文件的扩展名是.MYI

InnoDB基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB表的大小只受限于操作系统文件的大小

注意:MyISAM表是保存成文件形式,在跨平台的数据转移中使用MyISAM存储省去不少麻烦
5、索引

InnoDB(索引组织表)使用的聚簇索引,索引就是数据,顺序存储,因此能缓存索引,也能缓存数据

MyISAM(堆组织表)使用的是非聚簇索引,索引和文件分开,随机存储,只能缓存索引

6、并发

MyISAM读写互相阻塞,不仅在写入的时候阻塞读取,还会在读取的时候阻塞写入,但读本身并不会阻塞另外的读

InnoDB读写阻塞与事务隔离级别相关

表格对比
属性 MyISAM InnoDB
事务 不支持 支持
锁粒度 表锁 行锁
存储 拆分文件 表空间
隔离等级 所有
可移植格式
引用完整性
数据主键
MySQL缓存数据记录
可用性 全版本 全版本
上一篇:MySQL查询表结构命令 下一篇:MySQL实现循环插入千万级数据

评论

评论(1)

暂无评论