第05章 存储引擎
存储引擎就指的是表的类型,也叫做表处理器,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操作。
1. 引擎介绍
1.1 InnoDB引擎:具备外键支持功能的事务存储引擎
- InnoDB支持
事务
和外键
的功能。 - InnoDB是MySQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
- 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
- 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
- 数据文件结构:
- 表名.frm 存储表结构(MySQL8.0时,合并在表名.ibd中)
- 表名.ibd 存储数据和索引
- InnoDB是为处理巨大数据量的最大性能设计。
- 对比MyISAM的存储引擎, InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
- MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。
1.2 MyISAM 引擎:主要的非事务处理存储引擎
- 处理数据量比较小的表,访问的效率较高的。
- MyISAM提供了大量的特性,包括全文索引、压缩、等,但MyISAM不支持事务、行级锁(只支持表级锁)、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
- 5.5之前默认的存储引擎
- 优势是
访问的速度快
,对事务完整性没有要求或者以SELECT、INSERT为主的应用 - 针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高 数据文件结构:
- 表名.frm 存储表结构
- 表名.MYD 存储数据 (MYData)
- 表名.MYI 存储索引 (MYIndex)
- 应用场景:只读应用或者以读为主的业务
(重点)MyISAM和InnoDB引擎的对比
MyISAM引擎适用于小型应用,系统以读和插入操作为主,只涉及很少的更新删除操作,并对事务的要求较低,则可以选择MyISAM引擎。优点在于:占用空间小
、处理速度快
;缺点是不支持事务
的完整性和并发性。
InnoDB引擎,提供了良好的事务管理
、崩溃修复
和并发控制
。InnoDB存储引擎支持事务,适用于对事务完整性的场合,还有更新和删除操作的数据准确性要求较高的财务系统。缺点是读写效率较低
、占用数据空间较大
。
MyISAM不支持外键、事务;只支持表级锁而不支持行级锁;只缓存索引,而不缓存真实数据。节省资源、消耗少、适用于简单业务。
InnoDB支持外键和事务;支持行级锁,操作时只锁定某一行,适合高并发的操作;不仅缓存索引还缓存真实数据,对内存的要求较高;支持并发写、需要更大的资源。