设为首页 收藏本站
查看: 591|回复: 0

[经验分享] MySQL存储引擎MyISAM与InnoDB的区别

[复制链接]

尚未签到

发表于 2017-11-13 14:38:46 | 显示全部楼层 |阅读模式
写在前面

    MySQL,Oracle,SqlServer都是在关系型数据库中都占有一席之地,MySQL数据库也被称为业内最广泛使用的开源数据库之一,而插件式存储引擎的是其最重要的特点之一,了解其存储引擎能更方便的使用MySQL数据库的特性。

本节目标
  • 了解MySQL插件式存储引擎
  • 掌握MyISAM和InnoDB存储引擎的区别


插件式存储引擎是什么?

   MySQL 的存储引擎为插件式存储引擎,即允许MySQL 官方提供,又允许第三方通过MySQL的API接口自行开发存储引擎。MySQL中使用各种不同的技术,将数据放在不同的文件系统中进行存储,例如针对内存数据库(MEMORY引擎)则将数据直接存储在内存中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的功能和 能力,通过选择不同的技术,用户能够获得额外的速度或者功能,从而改善应用的整体功能。例如,如果要研究大量的临时数据,也许就需要使用内存存储引擎,内存存储引擎能够在内存中存储所有的表格数据,帮助用户完成应用。又或者,用户也许需要一个支持事务处理的数据库,以确保事务处理不成功时数据的回退能力,这就需要使用支持事务处理的存储引擎(InnoDB引擎)。这些不同的技术以及配套的相关功能在MySQL中被称做存储引擎(也称做表类型)。MySQL默认配置了许多不同的 存储引擎,可以预先设置或者在MySQL服务器中启用。可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储信息、如何检索这些信息以及需要数据结合什么性能和功能的时候提供最大的灵活性。MySQL5.5之后提供10种存储引擎,MEMORY,CSV,PERFORMANCE_SCHEMA,BLACKHOLE,MyISAM,MRG_MYISAM,ARCHIVE,FEDERATED,InnoDB,Aria。在MySQL的众多存储引擎中InoDB与MyISAM为使用最多的两个存储引擎。所以本文也主要讲述这两个存储引擎之间的区别。


MyISAM和InnoDB存储引擎的区别

    在说两者之间的区别之前,首先要弄清楚一个概念,存储引擎是表级别的概念,所以才成为表类型,每创建一张表都可以指定所使用的存储引擎,但是并不建议每张表都交叉使用不同的引擎。


1 数据文件
MyISAM存储引擎每张表都创建三个文件
table_name.frm
存储表的结构
table_name.MYD
存储数据
table_name.MYI
存储索引
    InnoDB对把数据存储与表空间中,分为两种方式:所有InonoDB表的数据和索引放置于同一个表空间中和每个表单独使用一个表空间存储表的数据和索引。
当所有表位于同一表空间中,其数据文件存于数据目录下以ibddata[#]来命名。这种方式不利于管理和备份恢复。所以一般使用第二种方式,每张表创建单独的表空间,用来实现InnoDB所支持的高级特性,比如单表导入导出,单标备份等功能。数据文件为
table_name.ibd
存储数据和索引
table_name.frm
存储表结构定义

2 事务性
    MyISAM类型的表强调性能,其执行速度比InnoDB类型更快但不提供事务的支持,也不支持外键,适用于大量select操作的应用场景。InnoDB支持事务,并把事务分为四个隔离级别,READ-UNCOMMITTED:读未提交容易发生脏读;READ-COMMITTED:读提交,该级别不可重复读;REPEATABLE-READ:可重复读,该级别容易发生幻读;SERIALIZABLE:串行化;默认级别为REPEATABLE-READ。适合对事务要求较高的场景中,较适用于处理大量短期事务。
3 锁粒度
    MyISAM的锁粒度较为粗糙,为表级锁。而InnoDB为行级锁,并使用间隙锁来防止幻读。当然InnoDB的行级锁也并非绝对,当SQL语句在执行过程中在不能确定扫描范围时也会对整张表进行锁定,例如updatestudents set sex=”M” where name like “%aaa%”;
4 索引类型
    InnoDB为聚集索引,辅助索引,MyISAM为非聚集索引并且支持全文索引(fulltext index)。
5 备份策略
       InnoDB支持热备、温备、冷备。崩溃后可安全恢复。MyISAM最支持温备与冷备。崩溃后无法安全恢复。由于MyISAM引擎不支持热备,所以在很多需要热备的应用场景中极不适用,近乎到了被抛弃的境地。
6 其他
    InnoDB支持自适应的hash索引,使用MVCC来支持高并发。在性能方面,支持预读操作,内存数据缓冲,内存索引缓存,插入操作缓冲区等。InnoDB引擎支持延迟索引更新,和表压缩等特性。

近年来,InnoDB已有取代MyISAM之趋势。MySQL与mariadb的默认存储引擎已使用InnoDB。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-407033-1-1.html 上篇帖子: mysql的日志类型及作用 下篇帖子: 3分钟了解Mysql空间搜GeoHash
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表