在MySQL的众多存储引擎中_MySQL存储引擎MyISAM与InnoDB的区别

写在前面

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值