Mysql逻辑架构
Mysql各个组件之间如何协作,有助于深入理解MySql服务器。
第一层,服务层:为客户端提供服务,如连接处理,授权认证、安全等。
第二层,核心层:MySql的核心服务都在这一层。包括查询解析,分析、优化、缓存,提供内置函数、存储过程、触发器、视图。
第三层,存储引擎:数据的存储和提取。响应上层服务器的请求。
一、线程处理
①每个客户端连接(可以是客户端工具的一个连接或应用程序创建的一个连接)都会对应一个单独的线程。该连接的查询操作只会在这个单独的线程中执行。该线程只能轮流在某个CPU核心或者CPU中运行。
②服务器端有线程缓存和线程池(mysql5.6才有线程池),所以并不需要为每个新的连接创建线程。
二、优化与执行
上图是一个简化版的查询优化。
①客户端发送一条查询给服务器
②服务器通过权限检查之后(用户名和密码等),先检查查询缓存,如果命中了缓存,立即返回缓存中的数据。否则进入下一阶段。
③服务器端进行SQL解析,预处理(词法、语法分析)再由又花钱生成对应的执行计划。
④根据优化器生成的执行计划,调用存储引擎的API来执行查询。
⑤将结果返回给客户端。
下图才是完整版的查询优化。