了解和掌握MySQL已经成为当下程序员的必备技能之一,本文将带你了解MySQL的基础架构,接下来我们从一条SQL查询执行过程来展开。

select * from tmp where id=1;

我们输入这样的一条语句在MySQL内部需要经历怎么样的流程呢?

image

这是一张MySQL的逻辑架构图,大体上MySQL分为两层:Server层和引擎层。

Server层

Server层主要包含:连接器,查询缓存,分析器(解析器),优化器,执行器等模块;各模块的具体功能如下:

连接器:主要负责管理连接,权限验证等功能

查询缓存:缓存查询结果,如果可以命中则直接返回,不执行后续操作

分析器(解析器):对SQL语句进行词法以及语法分析工作

优化器:生产执行计划,进行索引的选择

执行器:负责与引擎层交互,返回执行结果

TIPS:

MySQL 8.0版本直接将查询缓存的整块功能删掉了,也就是说8.0开始彻底没 有这个功能了

引擎层

引擎层则包含各种各样的引擎,例如:InnoDB,Myisam,Memory等等。它们各有特点。

我们常见的主要是InnoDB,MyISAM;如下是它们的对比图:

属性 InnoDB MyISAM
ACID事务 支持 不支持
崩溃恢复 支持 不支持
锁粒度 行锁 表锁
MVCC 支持 不支持
外键 支持 不支持
文件结构 .frm,.idb .frm,.MYI,.MYD
  • InnoDB支持ACID事务,而MyISAM不支持

  • InnoDB支持崩溃恢复,而MyISAM不支持

  • InnoDB支持MVCC,而MyISAM不支持

  • InnoDB支持外键,而MyISAM不支持

  • InnoDB的锁粒度可以支持行锁,而MyISAM仅支持到表锁

  • InnoDB的文件结构包含 .frm(表结构文件),.idb(数据以及索引文件)

  • MyISAM 的文件结构包含 .frm(表结构文件),.MYI(索引文件),.MYD(数据文件)

本篇内容旨在帮助大家对MySQL的逻辑架构以及存储引擎有个简单了解,后续会在次基础上逐步展开,也请大家关注后续更新。