MySQL: 2 执行SQL语句的架构设计
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL: 2 执行SQL语句的架构设计相关的知识,希望对你有一定的参考价值。
1.回顾:SQL执行请求与连接的建立
系统采用数据库连接池的方式去并发访问数据库,然后数据库自己也会维护一个连接池,在其中管理各种系统与数据库服务器建立的所有连接。
当系统从数据库连接池获取到一个数据库连接之后,就可以执行增删改查的SQL语句了。
2.监听执行请求的线程
当系统与数据库建立连接后,数据库连接池中的某个连接接收到了网络请求,也就是一条SQL语句。
此时,数据库服务器中会有一个线程一直在监听请求以及读取请求数据。其目的就是从网络连接中读取和解析出来一条我们的系统发送过去的SQL语句。
这里完成了mysql内部的工作线程从一个网络连接中读取出来一个SQL语句。
3.SQL接口(执行器):负责处理接收到的SQL语句
读取到了SQL语句,那么接下来就是要执行SQL语句了。
MySQL内部提供了一个组件,即SQL接口(SQL Interface),这是一套执行SQL语句的接口,专门用于执行系统发送给MySQL的那些增删改查的SQL语句。
当MySQL的工作线程接收到SQL语句之后,就会转交给SQL接口去执行。
4.查询解析器:让MySQL能看懂SQL语句
MySQL本身只是数据管理系统,并不能理解SQL语句的意思。
查询解析器
MySQL中有个关键的组件,那就是查询解析器。
查询解析器(Parser)就是负责对SQL语句进行解析的。
例如: select id,name,age from users where id = 1,经过解析器拆解后为:
- 现在要从“users” 表里查询数据
- 查询 “id” 字段的值等于1的那行数据
- 对查出来的那行数据要提取里面的 "id,name,age" 三个字段
SQL解析,是按照既定的SQL语法,对我们按照SQL语法规则编写的SQL语句进行解析,然后理解这个SQL要干什么事情。
5.查询优化器:选择最优的查询路径
当我们通过解析器理解了SQL语句要干什么之后,接着会找查询优化(Optimizer)来选择一个最优的查询路径。
为什么要优化?
一条最简单的SQL语句,可能存在两种以上的实现路径。比如:有id,name,age三个字段,那么可以有先过滤 “id” 字段的值,也可以同时过滤“id,name,age” 三个字段。这其中的性能存在差异。
查询优化器
查询优化器的主要作用,就是针对我们编写的几十行、几百行甚至上千行的复杂SQL语句生成查询路径树,然后从里面选择一条最优的查询路径出来。
6.存储引擎接口,真正执行SQL语句
最后一步,根据查询优化器选择的最优查询路径,将该方案交给底层的存储引擎去真正的执行。
存储引擎
每一条SQL在执行前后,都需要知道哪些数据在内存,哪些数据在磁盘,还有就是向哪个磁盘文件或内存更新、查询数据。
而这一过程依靠存储引擎来实现。存储引擎就是执行SQL语句的,他会按照一定的步骤去查询内存缓存数据,更新磁盘数据,查询磁盘数据,等待,执行诸如此类的一系列的操作。
MySQL的架构设计中,SQL接口、SQL解析器、查询优化器其实都是通用的,只是一套组件。
而存储引擎,它支持各种各样的存储引擎,包括常见的InnoDB、MyISAM、Memory等等,我们可以选择使用哪种存储引擎来负责具体的SQL语句执行。
7.执行器:根据执行计划调用存储引擎的接口
存储引擎的作用是用于访问内存以及磁盘上的数据,而实际上去调用存储引擎的接口另有其人。
执行器
MySQL中还有执行器这个概念,执行器会根据优化器选择的执行方案,去调用存储引擎的接口按照一定的顺序和步骤,就把SQL语句的逻辑给执行了。
其执行过程是,执行器会根据我们的优化器生成的一套执行计划,然后不停的调用存储引擎的各种接口去完成SQL语句的执行计划,接着不停的更新或提取一些数据出来。
以上是关于MySQL: 2 执行SQL语句的架构设计的主要内容,如果未能解决你的问题,请参考以下文章