平时我们使用数据库,看到的通常都是一个整体,比如,在执行下面这个查询语句时:
SELECT * FROM T WHERE id=3;
我们看到的只是输入一个语句,返回一个结果,却不知道这条语句在MySQL内部的执行过程。
以下,我将MySQL拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,对MySQL有更深入的理解。这样当碰到MySQL的一些异常或问题时,就能够直戳本质,更为快速地定位并解决问题
上面是MySQL的基本架构示意图,可以从中清楚的看到SQL语句在MySQL的各个功能模块中的执行过程。
大体来说,MySQL可以分为Sever层和搜索引擎层两部分。
Sever层包含连接器、查询缓存、分析器、优化器、执行器等,涵盖MySQL的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。
而存储引擎层负责数据的存储和提取。其架构模式是插件式的,支持InnoDB、MyISAM、Memory等多个存储引擎。现在最常用的存储引擎是InnoDB,它从MySQL 5.5.5版本开始成为了默认存储引擎。
也就是说,你执行CREATE TABLE建表的时候,如果不指定引擎类型,默认使用的就是InnoDB。不过,你也可以通过指定存储引擎的类型来选择别的引擎,比如在CREATE TABLE语句中使用engine=memory,来指定使用内存引擎创建表。不同存储引擎的表数据存储方式不同,支持的功能也不同。