本文整理自网络,侵删。
目录
- 1、通常sql执行流程
- 1.1 问题1:MySQL谁去处理网络请求?
- 1.2 问题2:MySQL如何执行sql语句?
- 1.3 查询解析器
- 1.4 查询优化器
- 1.5 存储引擎
- 1.6 执行器
- 2、总结
1、通常sql执行流程
用户发起请求到业务服务器,执行sql语句时,先到连接池中获取连接,然后到mysql服务器执行查询。
1.1 问题1:MySQL谁去处理网络请求?
msyql服务器谁负责从这个连接中去监听这个网络请求?谁负责从网络连接里把数据读出来?
其实大家都知道,网络连接必须得分配一个线程去处理,由一个线程来监听和读取请求数据,比如从网络连接中读取和解析出来一条发过去的sql语句,
如下图所示:
1.2 问题2:MySQL如何执行sql语句?
- 接着我们思考一下,当mysql内部的工作线程从一个网络连接中读取出来一个sql语句之后,此时会如何执行这个sql语句呢?
- 如果要执行这个sql,去完成底层的数据增删改查,其实是一项极其复杂的任务了。Mysql内部首先提供一个组件,就是SQL接口(SQL Interface),他是一套执行sql语句的接口,专门用于执行我们发送给mysql的那些增删改查的sql语句。
- 因此mysql工作线程接收到SQL语句后,就会转交给SQL接口去执行,
如下图:
1.3 查询解析器
MySQL怎么看懂和理解这些SQL?比如现在有个这样的SQL,我们人脑处理一下,只要懂SQL语法的人,立马就明白什么意思了。但是MySQL是一个数据库管理系统,他是没法直接理解这些SQL语句的!此时就有一个关键组件出场了:查询解析器。
查询解析器(Parser)是负责对SQL语句进行解析的,比如上面那个sql语句进行一下拆解,可以拆解为以下几部分:
- 要从『users』表里查询数据
- 查询『id』字段等于1的那行数据
- 对查询出来的那行数据要提取里面『id,name,age』三个字段
所谓的SQL解析,就是按照既定的sql语法,对我们按照sql语法规则编写的sql语句进行解析,然后理解这个sql语句要干什么事情,
如下图所示:
1.4 查询优化器
当通过解析器理解了SQL要干什么之后,并不是马上去执行,而是要通过查询优化器(Optimizer)来选择一个最优的查询路径。就以上面那个sql查询为例,看下所谓最优查询路径是什么。
要完成这个事,我们有以下几个查询路径:
- 查询路径1:直接定位到『users』表中的『ID』字段等于1的那一行数据,然后取那行数据的『id,name,age』三个字段值就行了;
- 查询路径2:先把『users』表中每一行数据的『id,name,age』三个字段的值都查出来,然后从这批数据里过了出『id』字段等于1的那行数据。
上面就是一个最简单的SQL语句的两种实现路径,要完成这个sql语句的目标,两个路径都可以做到,但哪一种更好呢?显然感觉上第一种查询路径更好一些。
相关阅读 >>
mysql中如何配置ssl_key和ssl-cert与ssl-ca的路径以及建立ssl连接的实例
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » MySQL执行SQL语句的流程详解
相关推荐
评论
管理员已关闭评论功能...