推荐阅读
- 学习笔记 《 深入理解 Java 虚拟机》
- 学习笔记 《 后端架构设计》
- 学习笔记 《 Java 基础知识进阶》
- 学习笔记 《 Nginx 学习笔记》
- 学习笔记 《 前端开发杂记》
- 学习笔记 《 设计模式学习笔记》
- 学习笔记 《 DevOps 最佳实践指南》
- 学习笔记 《 Netty 入门与实战》
- 学习笔记 《 高性能MYSQL》
- 学习笔记 《 JavaEE 常用框架》
- 学习笔记 《 Java 并发编程学习笔记》
- 学习笔记 《 分布式系统》
- 学习笔记 《 数据结构与算法》
由下图,可以看出MySQL最上层是连接组件。下面服务器是由连接池、管理工具和服务、SQL接口、解析器、优化器、缓存、存储引擎、文件系统组成。
1、MySQL 连接层
-
MySQL 客户端: 用户通过TCP 连接到MySQL的服务器,常见的MySQL 客户端包括,JDBC,PHP等等
-
MySQL 连接池:由于每次建立建立需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。连接管理主要负责鉴权,线程复用,连接管理等等
-
管理工具和服务:系统管理和控制工具,例如备份恢复、Mysql复制、集群等,也就是常用的mysqladmin等工具
2、MySQL 服务层
-
SQL服务层:又称之为接口层,用于接受用户的SQL命令,并且返回用户需要查询的结果。比如select from 就是调用SQL Interface,处于DML,DDL视图,存储过程以及触发器等等。
-
解析器: SQL命令传递到解析器的时候会被解析器验证和解析。
解析器是由Lex和YACC实现的,是一个很长的脚本, 主要功能:a . 将SQL语句分解成数据结构(抽象语法树 AST),并将这个结构传递到后续步骤,以后SQL语句的传递和处理就是基于这个结构的 b. 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
- 优化器:查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1; 这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤将这两个查询条件联接起来生成最终查询结果。在比如索引的排序优化就是在优化器中优化的。
- 缓存器: 查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。通过LRU算法将数据的冷端溢出,未来得及时刷新到磁盘的数据页,叫脏页。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
3、MySQL 存储引擎
存储引擎是MySQL中具体与文件打交道的子系统,也是MySQL最有特色的地方。MySQL区别于其他数据库的最重要特点是其插件式的表存储引擎。他根据MySQL AB公司提供的文件访问层抽象接口来定制一种文件访问的机制(该机制叫存储引擎)。对于开发者而言,常见的存储引擎有 MyISAM、InnoDB 以及 Memory等等。