【MySQL】体系结构
MySQL体系结构由连接层、server层、存储引擎层组成
- 1、第一层是连接层,是最上层负责处理所有客户端的连接和身份的认证,客户端通过一些网络连接协议,比如TCP/ IP、命名管道、共享内存、unix socket与MySQL建立连接
2、第二层是SQL层,负责处理SQL的核心逻辑,它的主要组件有连接池、SQL接口、解析器、优化器、查询缓存。
连接池就是负责处理和存储数据库和客户端之间的连接,一个线程,负责一个连接,连接池包括用户认证模块,这个模块对用户的登录身份进行认证和安全管理,验证用户的执行操作权限。
SQL接口,它负责接收客户端发送的SQL语句。
解析器会对SQl语法进行解析,生成解析树。
查询优化器,它会基于解析树生成执行计划,选择适当的索引,然后根据执行计划去执行SQl语句,并且与每个存储引擎进行交互。
缓存,它包括各种存储引擎的缓存,比如InnoDB的缓冲池 Buffer Pool 和MyISAM的 key buffer 密钥缓冲区,还缓存一些权限。
3、第三层是存储引擎层,存储引擎包括MyISAM、InnoDB、Archive和Memory。MySQL是一个插件存储引擎。只要正确定义了与MySQL Server的接口,任何引擎都可以访问MySQL,这也是MySQL受欢迎的原因之一。
4、存储引擎底部是物理存储层,是文件的物理存储层,包括二进制日志,错误日志,重做日志、数据文件、索引、慢查询日志、全日志等
二、 一条 SQL 的内部执行流程
MySQL各功能模块中SQL语句的执行过程:
1、建立链接,通过客户端/服务器通信协议连接到 MySQL;
2、查询缓存,如果启用了 Query Cache (查询缓存),并且在查询缓存期间查询到相同的SQL语句,则查询结果将直接返回给客户端,MySQL优化查询;
如果没有打开 Query Cache (查询缓存)没有查询到确切的SQL语句,解析器将解析语法和语义并生成解析树。
3、预处理器生成一个新的解析树;
4、查询优化器生成执行计划;
5、查询执行引擎执行SQL语句,查询执行引擎,将根据SQL语句中表的存储引擎类型以及相应的API接口与底层存储引擎缓存或物理文件之间的交互来获得查询结果。
6、查询结果将被缓存,并在MySQL Server 过滤后返回给客户端。如果启用了查询缓存,SQL语句和结果将完全保存在查询缓存中。如果以后执行相同的SQL语句,将直接返回结果。