百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> MySQL存储引擎MyISAM与InnoDB区别总结整理
分享文章到:

MySQL存储引擎MyISAM与InnoDB区别总结整理

发布时间:05/13 来源:未知 浏览: 关键词:

1、MySQL默许存储引擎的变迁

在MySQL 5.1以前的版本中,默许的搜寻引擎是MyISAM,从MySQL 5.5之后的版本中,默许的搜寻引擎变更为InnoDB。

2、MyISAM与InnoDB存储引擎的主要特色

MyISAM存储引擎的特色是:表级锁、不支撑事务和全文索引,适合一些CMS内容治理系统作为后台数据库运用,但是运用大并发、重负荷生产系统上,表锁构造的特性就显得力不从心;

下列是MySQL 5.7 MyISAM存储引擎的版本特性:

InnoDB存储引擎的特色是:行级锁、事务平安(ACID兼容)、支撑外键、不支撑FULLTEXT类型的索引(5.6.4今后版本开端支撑FULLTEXT类型的索引)。InnoDB存储引擎供给了拥有提交、回滚和解体恢复能力的事务平安存储引擎。InnoDB是为处置庞大量时具有最大机能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。

下列是MySQL 5.7 InnoDB存储引擎的版本特性:

注意:

InnoDB表的行锁也不是绝对的,假设在施行一个SQL语句时MySQL不能肯定要扫描的范畴,InnoDB表一样会锁全表,例如update table set num=1 where name like “a%”

两品种型最主要的差别就是InnoDB支撑事务处置与外键和行级锁。而MyISAM不支撑。所以MyISAM往往就容易被人以为只适合在小项目中运用。

3、MyISAM与InnoDB机能测试

下边两张图是官方供给的MyISAM与InnoDB的压力测试效果

可以看出,随着CPU核数的添加,InnoDB的吞吐量反而越好,而MyISAM,其吞吐量险些没有什么变化,显然,MyISAM的表锁定机制降低了读和写的吞吐量。

4、事务支撑与否

MyISAM是一种非事务性的引擎,使得MyISAM引擎的MySQL可以供给高速存储和检索,以及全文搜寻能力,适合数据仓库等查询频繁的利用;

InnoDB是事务平安的;

事务是一种高级的处置方式,如在一些列增删改中只有哪个出错还可以回滚复原,而MyISAM就不可以了。

5、MyISAM与InnoDB形成上的区别

(1)每个MyISAM在磁盘上存储成三个文件:

第一个文件的名字以表的名字开端,扩展名指出文件类型,.frm文件存储表定义。
第二个文件是数据文件,其扩展名为.MYD (MYData)。
第三个文件是索引文件,其扩展名是.MYI (MYIndex)。

(2)基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只挨限于操纵系统文件的大小,个别为 2GB。

6、MyISAM与InnoDB表锁和行锁的解释

MySQL表级锁有两种模式:表同享读锁(Table Read Lock)和表独有写锁(Table Write Lock)。什么意思呢,就是说对MyISAM表进行读操纵时,它不会阻塞其他会员对统一表的读请求,但会阻塞对统一表的写操纵;而对MyISAM表的写操纵,则会阻塞其他会员对统一表的读和写操纵。

InnoDB行锁是通过给索引项加锁来实现的,即只要通过索引前提检索数据,InnoDB才运用行级锁,否则将运用表锁!行级锁在每次获取锁和释放锁的操纵需要耗损比表锁更多的资源。在InnoDB两个事务产生死锁的时候,会盘算出每个事务影响的行数,然后回滚行数少的那个事务。当锁定的场景中不波及Innodb的时候,InnoDB是检测不到的。只能依托锁定超时来解决。

7、是否保留数据库表中表的具体行数

InnoDB 中不保留表的具体行数,也就是说,施行select count(*) from table 时,InnoDB要扫描一遍整个表来盘算有多少行,但是MyISAM只有简略的读出保留好的行数即可。

注意的是,当count(*)语句包含where前提时,两种表的操纵是同样的。也就是 上述“6”中介绍到的InnoDB运用表锁的一种状况。

8、怎样选中

MyISAM适合:

  • (1)做许多count 的盘算;
  • (2)插入不频繁,查询非常频繁,要是施行大量的SELECT,MyISAM是更好的选中;
  • (3)没有事务。

InnoDB适合:

  • (1)牢靠性要求比较高,或者要求事务;
  • (2)表更新和查询都相当的频繁,并且表锁定的时机比较大的状况指定数据引擎的创建;
  • (3)要是你的数据施行大量的INSERT或UPDATE,出于机能方面的考虑,应当运用InnoDB表;
  • (4)DELETE FROM table时,InnoDB不会从新创立表,而是一行一行的 删除;
  • (5)LOAD TABLE FROM MASTER操纵对InnoDB是不起作用的,解决要领是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是关于运用的额外的InnoDB特性(例如外键)的表不适用。

要注意,创建每个表格的代码是雷同的,除了最后的 TYPE参数,这一参数用来指定数据引擎。

其他区别:

1、关于AUTO_INCREMENT类型的字段,InnoDB中必须包含只要该字段的索引,但是在MyISAM表中,可以和其他字段一起创立结合索引。

2、DELETE FROM table时,InnoDB不会从新创立表,而是一行一行的删除。

3、LOAD TABLE FROMMASTER操纵对InnoDB是不起作用的,解决要领是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是关于运用的额外的InnoDB特性(例如外键)的表不适用。

4、 InnoDB存储引擎被完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而保持它本人的缓冲池。

5、关于自增长的字段,InnoDB中必须包含只要该字段的索引,但是在MyISAM表中可以和其他字段一起创立结合索引。

6、清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表。

总结

以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,感谢大家对脚本之家的支撑。要是你想理解更多相干内容请查看下面相干链接

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有158人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板