一. 简介
MySQL的核心即存储引擎,存储引擎是作用在表上,而不是数据库,不同的存储引擎提供了不同的存储机制、索引技巧、锁定水平等,MySQL5.7支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CVS等,需针对不同的要求选择合适的存储引擎。
- 查看MySQL支持的存储引擎:
SHOW ENGINES
- 查看MySQL默认存储引擎:
SHOW VARIABLE LIKE 'storage_engine'
二. InnoDB
-
简介
InnoDB是MySQL5.5.5之后的默认存储引擎,是事务型数据库的首选引擎,支持事务安全表(ACID)、行锁定、外键。 -
在磁盘上的体现
xxx.frm:表结构文件
xxx.ibd:索引和数据文件(InnoDB Data)
注:索引和数据在同一文件,故又称InnoDB的索引为聚集索引。 -
事务写入过程
(1)先将事务数据写入到Buffer Pool和事务日志;
(2)再异步地从Buffer Pool或事务日志中将数据写到Datafile中;
(3)若数据写到Datafile未完成数据库就崩了,Buffer Pool的数据也极大可能丢失,故需从事务日志中恢复数据,此过程即Recovery;注:
(1)LSN是事务日志记录每一条记录的编号,每次将事务日志中的数据写到Datafile后,会有一个标记(即Checkpoint)记录写到哪一条数据了,下次只需从Checkpoint的下一条记录开始写入; (2)事务日志记录了所有的数据,且数据不允许修改; (3)在未将事务数据写到Datafile之前,不允许删除事务日志。
-
后台线程
(1)Master Thread(主线程):将缓冲池中的数据异步刷新到磁盘中;
(2)IO thread(io线程):IO请求的回调处理,且使用了大量的AIO来处理;
(3)Purge Thread(净化线程):回收已使用并分配的undo页;
(4)Page Cleaner Thread (页面清洁线程):从master线程中卸下buffer pool刷脏页的工作独立出来的线程; -
底层存储结构
B+Tree
三.MyISAM
-
在磁盘上的体现
xxx.frm:表结构文件
xxx.MYD:数据文件(MyISAM Data)
xxx.MYI:索引文件(MyISAM Index)
注:因索引和数据在不同文件中,MyISAM的索引又称为非聚集索引。 -
MyISAM和InnoDB的区别
(1)InnoDB支持事务,MyISAM不支持事务;
(2)InnoDB适合频繁修改以及涉及到安全性较高的应用, MyISAM适合查询以及插入为主的应用;
(3)InnoDB支持外键,MyISAM不支持外键;
(4)InnoDB支持行级锁,MyISAM锁的粒度是表级的。