![914050739934d8d5fd7c9e66f647021c.png](https://i-blog.csdnimg.cn/blog_migrate/42350b5b0e0d8b0c7a78dcc064ed2bed.jpeg)
作者:阿茂
InnoDB介绍
书接上回,我们基本说完了mysql的逻辑架构与物理架构。今天我们来说说当下比较火的存储引擎InnoDb。MySQL 5.5以前InnoDB引擎是需要手动通过Plugin方式引入,内置的是MyISAM。MySQL 5.5以后随着数据库默认引擎的更换,InnobaseOy的InnoDB就开始大放异彩(以下我们将用MySQL5.7举例)。我们先说说它有什么样的特性让诸位英雄都说香:
- 免费:这个在当时Oracle,DB2,Sybase MSSQL垄断的时代,有一款免费还相对稳定的的数据库,再加上后期社区非常活跃,能不香吗?
- 完善的崩溃恢复机制:不管是服务器硬件故障还是挖掘机挖断电线导致的关机,重启数据库后都无需执行任何操作(根据设置参数有关) 崩溃恢复会自动完成崩溃之前已提交的所有更改,并撤消正在处理但尚未提交的所有更改。只需重新启动,然后从上次中断的地方继续即可。
- 高效的缓存查询机制:通过一些算法和设计(后面会说到)让常用的数据最大可能的基于内存Buffer处理减少IO,通常这块Buffer将高达数据库服务器内存的80%分配给它。
- 完整性外键机制:将数据拆分到不同数据表中使用外键机制会自动更新或删除关联表中的数据(现在基本没有人这么玩了,一旦设计不全面, 数据的修改将不受程序的控制,数据耦合度太强,适用于一些强制保证数据完整规范的系统,例如工作流这类的)
- 数据完整性校验机制:数据在磁盘或内存中损坏,则校验机制会在使用前提醒您注意虚假数据
- 自动引入主键列:有适当数据库主键列时会自动在Where子句,Order By子句,Group By字句后自动引入主键。
- 基于数据库缓存Buffer写数据:不仅允许对同一表的并发读写访问,而且还缓存更改的数据以减少磁盘IO。
- 自适应哈希索引 :当频繁的从巨表中查询相同行的数据时候就会使用此方式,让它们像从Hash表中查出来的一样。
- 表和索引压缩:这个不用大多说了,它借助于zlib库,采用L777压缩算法。就是让你在原来两个数据页中的数据现在一页就能显示下,但是过度压缩会带来重组页的影响, 而且不是对所有类型数据列都有良好的压缩比。
- 动态创建或删除索引,保证数据的可用性(这个后面单独说)
- 截断表空间非常快,并且可以释放空间给系统重用。
- 支持存储引擎混用,最常见的就是我们关联表查询的时候产生的中间临时表,默认就是使用MEMORY引擎来实现的。
更多特点请参考阅读最下方:Benefits of Using InnoDB Tables
###InnoDB内存结构 接下来我们来看一张InnoDB的逻辑架构图: