浅谈一下MyISAM和InnoDB存储引擎的区别
作者:魏天乐大帅哥
这篇文章主要介绍了MyISAM和InnoDB存储引擎的区别,存储引擎是MySQL中特有的一个术语,其它数据库中没有,实际上存储引擎是一个表存储/组织数据的方式,今天就跟小编来看看MyISAM和InnoDB存储引擎的区别,需要的朋友可以参考下
前言
MyISAM和InnoDB是使用MySQL最常用的两种存储引擎,在5.5版本之前默认采用MyISAM存储引擎,从5.5开始采用InnoDB存储引擎。
存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
show engines; //查看存储引擎
关于数据库的大致架构和基础操作,这里不过多介绍;
区别
说区别之前说一下他俩的索引底层都是BTREE+ , B+树的数据结构维护索引和数据(m是非聚簇索引,i是聚簇索引,这点注意下)
事务
- InnoDB支持事务,具有安全性和完整性,系统容灾性强,且通过使用多版本并发控制MVCC来获得高并发性;
- MyISAM不支持事务; 系统容灾性弱;
外键
- InnoDB支持外键
- MyISAM不支持外键
因此把一个有外键的InnoDB表单转换成MyISAM表单会失败;
表单的存储
通过使用不同存储引擎建立表单查看生成的对应存储文件,发现除了双方共有的 .frm存储表属性外:
- InnoDB存储引擎表单独存放到一个独立的IBD文件中;(索引和数据放在了一起)–>聚簇索引–>通过主键索引效率高; 普通键进行索引可能需要回表;
- MyISAM存储引擎表单由MYD和MYI两部分组成,其中MYD(MYData)用来存放数据文件,而MYI(MYIndex)则用来存放索引文件–>非聚簇索引–>数据存放的是指针,不需要回表,主键索引和普通键索引分开了;
数据查询效率
- InnoDB不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM更高;
- InnoDB不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;
数据更新效率
InnoDB的内部优化,包括**磁盘预读(**从磁盘读取数据时采用可预测性读取),自适应哈希(自动在内存中创建hash索引以加速读操作)等, 且能够加速插入操作的插入缓冲区。所以比MyISAM在数据更新能力上更优;
如何选择
- 看设计的业务是否需要支持事务,需要–InnoDB;不需要–MyISAM;
- 如果select读操作频繁,用MyISAM; 如果数据更新操作使用频繁操作用InnoDB;
- 考虑系统容灾能力,MyISAM更不容易恢复,InnoDB容易恢复;
既然MySQL5.5版本之后默认了InnoDB,不知道用什么那就InnoDB,跟着主流走不会错;
到此这篇关于浅谈一下MyISAM和InnoDB存储引擎的区别的文章就介绍到这了,更多相关MyISAM和InnoDB存储引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!