MySQL工作原理

一、 MySQL结构图

MySQL工作原理_第1张图片

        如图可见MySQL服务器主要是由 Connection Pool(连接池)、Management Services & Utilities(服务管理和工具)、SQL Interface(SQL接口)、Parser(解析器)、Optimizer(优化器)、Caches & Buffers(查询缓存)、Pluggable Storage Engines(存储引擎)、File systems(文件系统)组成。

二、MySQL各组件的作用

1、connectors

处理一些客户端和连接的服务,包含本地的sock通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信,主要完成一些类似于连接处理、授权认证及相关的安全方案,在该层上引用了线程池的概念,为通过认证安全接入的客户端提供线程。同样在该层上可以实现基于ssl的安全链接。服务器也会为安全接入的每个客户端验证它所具有的操作权限。

比如:与其他编程语言中的sql 语句进行交互,如php、java等。

2、Connection Pool(连接池)

用于管理用户连接和线程处理,由于MySQL建立链接需要消耗很多时间,连接池会将这些链接进行缓存,更好的提升服务器性能。

3、Management Services & Utilities(服务管理和工具)

服务管理和控制工具。

4、SQL Interface(SQL接口)

 接收来自客户端的SQL命令,并且返回执行结果给客户端。

5、Parser(解析器)

解析SQL语句,解析器是由Lex和YACC实现的。SQL命令传递到解析器的时候会被解析器验证和解析。

主要功能:

    1. 将SQL语句分解成数据结构,并将这个结构传递到后续步骤,后面SQL语句的传递和处理就是基于这个结构的

    2.  如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的,语句将不会继续执行下去

5、Optimizer(优化器)

SQL语句在查询之前会使用查询优化器对查询进行优化(产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返会结果)他使用的是“选取 - 投影 - 联接”策略进行查询。

6、Caches & Buffers(查询缓存)  

在执行我们的查询语句时会先从缓存中去查询,如果命中了缓存则会直接去查询缓存中取数据,这样也大大提高了查询的性能。

7、Pluggable Storage Engines(存储引擎)  

存储引擎是MySql中具体的与文件打交道的子系统,包含各种存储引擎 InnoDB、MyISAM、Memory ...等

Mysql的存储引擎是插件式的。它根据MySql AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制(这种访问机制就叫存储引擎)

8、File systems(文件系统)  

MySQL存储的数据文件、索引文件以及日志文件等。

三、查询语句的执行过程

MySQL工作原理_第2张图片

        上图可以很清楚的看出,当客户端请求一条查询SQL时,首先会先从查询缓存里去查询看是否由命中查询结果如果有则直接返回结果给客户端,如果没有那么就会把SQL语句传递给解析器进行解析,解析器会将SQL进行数据结构化并进行预处理判断SQL语句是否正确,解析器解析完后将最新的解析树传递给查询优化器进行优化,优化完后生成执行计划给到存储引擎中,存储引擎从文件系统中取出数据并将数据返回给客户端同时进行缓存。

四、注意点

1、如何缓存查询数据

存储引擎处理完数据,并将其返回给程序的同时,它还会将一份数据保留在缓存中,以便更快速的处理下一次相同的请求。具体情况是,mysql会将查询的语句、执行结果等进行hash,并保留在cache中,等待下次查询。

2、buffer与cache的区别

从mysql原理图中可以看到,缓存那里实际上有buffer和cache两个,那它们之间的区别:简单的说就是,buffer是写缓存,cache是读缓存。

3、如何判断缓存中是否已缓存需要的数据

这里可能有一个误区,觉得处理SQL语句的时候,为了判断是否已缓存查询结果,会将整个流程走一遍,取得执行结果后再与需要的进行对比,看看是否命中,并以此说,既然不管缓存中有没有缓存到查询内容,都要整个流程走一遍,那缓存的优势在哪?

其实并不是这样,在第一次查询后,mysql便将查询语句以及查询结果进行hash处理并保留在缓存中,SQL查询到达之后,对其进行同样的hash处理后,将两个hash值进行对照,如果一样,则命中,从缓存中返回查询结果;否则,需要整个流程走一遍。

你可能感兴趣的:(Mysql,mysql,数据库,java)