MySQL存储引擎 | 青训营笔记

87 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天。

在大作业中我们使用到了MySQL,但是对mysql比较陌生的同学可能会对mysql的两种存储引擎不太了解,在此对两种搜索引擎做一个对比。

存储引擎

MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。存储引擎在MySQL的体系架构中位于第三层,负责MySQL中数据的存储与提取,是与底层系统文件打交道的子系统。

存储引擎是针对表的而不是库,对于同一个库不同的表可以使用不同的存储引擎。常见的存储引擎有 MyISAM,InnoDB。

MyISAM和InnoDB对比

  • 事务: innodb支持回滚、支持事务、外键、行锁,多版本事务管理mvcc。 myisam不支持事务、不支持外键、表级锁。

  • 存储结构上: innodb 2个文件.ifm(表结构) 、.ibd(数据和索引) myisam 3个文件 .ifm(表结构) 、.myd(数据文件)、.myi(索引文件)

  • 存储空间上:innodb 占用空间大,需要更多的内存和存储,他需要有缓存池用于高速缓存数据和索引。 myisam 占用空间小,可被压缩,数据以文件的方式存储。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。

  • 索引: myisam支持全文索引fulltext,索引保存的是行地址。 innodb可以使用sphinx插件支持全文索引,主键索引保存的是数据,其他索引保存的是主键索引地址。

  • 缓存: myisam仅仅缓存索引,不缓存数据(myisam数据文件和索引文件分开) innodb缓存索引和真实数据,所以,对内存有更高的要求。

  • 性能: select:myisam性能高 update、insert:innodb性能高 清空整个表时,InnoDB是一行一行的删除,效率非常慢。MyISAM则会重建表