mysql的逻辑结构:
这里分为三层:
连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理、授权认证、安全等。
SQL处理层:也叫服务器层,包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现。
数据存储层:也叫存储引擎层,负责数据存储,存储引擎的不同,存储方式、数据格式、提取方式等都不相同,这一部分也是很大影响数据存储与提取的性能的。但是,与分层的思想一致,SQL处理层是通过API与存储引擎通信的,API屏蔽了下层的差异,下层提供对外接口,上层负责调用即可,不必清楚下层怎么实现。
连接层
当MySQL启动(MySQL服务器就是一个进程),等待客户端连接,每一个客户端连接请求,服务器都会新建一个线程处理(如果是线程池的话,则是分配一个空的线程),每个线程独立,拥有各自的内存处理空间,但是,如果这个请求只是查询,没关系,但是若是修改数据,很显然,当两个线程修改同一块内存是会引发数据同步问题的。
>连接处理流程
连接到服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功,还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个数据库某个表的某个操作)。
SQL处理层
这一层主要功能有:SQL语句的解析、优化,缓存的查询,MySQL内置函数的实现,跨存储引擎功能(所谓跨存储引擎就是说每个引擎都需提供的功能(引擎需对外提供接口)),例如:存储过程、触发器、视图等。
>执行过程:
(图中的查询并不是一定是select语句,在MySQL中,一般习惯把每一条SQL命令称为query(查询))
1.如果是查询语句(select语句),首先会查询缓存是否已有相应结果,有则返回结果,无则进行下一步(如果不是查询语句,同样调到下一步);
2.解析查询,创建一个内部数据结构(解析树),这个解析树主要用来SQL语句的语义与语法解析;详情可查看:MySQL解析器。
3.优化:优化SQL语句,例如重写查询,决定表的读取顺序,以及选择需要的索引等。这一阶段用户是可以查询的,查询服务器优化器是如何进行优化的,便于用户重构查询和修改相关配置,达到最优化。这一阶段还涉及到存储引擎,优化器会询问存储引擎,比如某个操作的开销信息、是否对特定索引有查询优化等。详情可查看:MySQL优化器。
存储引擎
存储引擎,也称为表类型,主要用来存储数据的,不同的存储引擎采用不同的技术(存储机制、索引机制、锁定机制)存储数据,这主要是为了满足数据存储要求,比如有的数据不需要大量的改动,只用来查询,而有的数据则需要常常修改(数据插入、删除、更新),针对各种业务情况,为了更好的数据处理效率采用不同的数据存储技术(即不同存储引擎)。
MySQL的存储引擎是插件式的,也就是说,用户可以随时切换MySQL的存储引擎:针对表或针对库都可(通过SQL语句命令)。这种灵活性也是MySQL受到欢迎的一个重要原因。MySQL集合了多种引擎:MyISAM、InnoDB、BDB、Merge、Memory等,默认的是InnoDB(MySQL5.5开始,以前是MyISAM)。
转自 https://blog.csdn.net/FreeeLinux/article/details/73476886