MySQL中存在多种存储引擎,存储引擎是执行器的操作的基础,存储引擎决定了数据库拥有的功能和性能,常见的存储引擎有Memory、InnoDB、MyIsam,MyIsam是早期MySQL的默认存储引擎,后来有其他公司开发并开源了InnoDB,并代替MyIsam成为了MySQL的默认存储引擎,如果没有其他特别的要求,通常是采用InnoDB作为存储引擎。

MyISAM Innodb
文件格式 数据和索引是分别存储的,数据.MYD,索引.MYI按记录插入顺序保存 数据和索引是集中存储的,.ibd按主键大小有序插入
空间碎片(删除记录并flush table 表名之后,表文件大小不变) 产生。定时整理:使用命令optimize table 表名实现 不产生
事务 不支持 支持
外键 不支持 支持
锁支持 表级锁定 行级锁定(不走索引则表锁)

# 一、InnoDB

InnoDB作为MySQL的存储引擎,存在以下几个特点:

  • 支持事物
    • 原子性:undo log保证(数据回滚)
    • 隔离性:默认为可重复读,通过MVCC(通过undo log提供多版本控制) + 间隙锁(解决幻读问题)保证
    • 可持久性:redo log保证,InnoDB基于Buffer Pool进行数据页操作,Buffer Pool为了性能要求,是随机刷盘的,而事物要求是事物提交后必须满足可持久性的特性,所以采用redo log的方式,直接存储对应的内存快照,以更小的粒度进行事物修改的数据的存储。
  • 支持行级锁:InnoDB在走索引的情况下采用的是行级锁,这样可以大大提高数据库的并发能力。
  • 支持聚簇索引(B+树):InnoDB的主键索引采用聚簇索引,可以避免回表操作,减少查询次数并提高读性能

# 1.1 索引结构

# B+ 树

为什么要B+树?和B树的区别 (opens new window)

# 1.2 内存架构

# Buffer Pool

# 1.3 日志文件

# bin log

# undo log

# redo log

Last Updated: 2022-9-9 12:59:53 ├F10: AM┤