mysql——一条查询语句是如何执行的

本文详细介绍了MySQL服务器层和存储引擎层的功能,包括连接器、分析器、优化器和执行器的角色。一条查询语句的执行过程涉及连接、查询缓存(已废弃)、分析、优化和执行。而SQL更新语句的执行则类似,经过权限校验后执行更新操作。文章深入解析了MySQL内部的工作原理,有助于理解数据库操作的本质。
摘要由CSDN通过智能技术生成

MySQL各个组间的作用

MySQL分为Server层和存储引擎层两个部分,作用分别是:

  • 连接、鉴权、词法和语法分析,优化在server层
  • 存储和读写数据在引擎层

1、server层:
连接器:跟客户端建立连接,获取权限,维持和管理连接
分析器:知道了要做什么

  • 词法分析:知道字符串,空格等代表什么
  • 语法分析:根据语法规则,判断语法是否正确

优化器:知道了该怎么做
执行器:实际干活的

2、存储引擎
我们知道表是由一行一行的记录组成的,但这只是一个逻辑上的概念。
物理上如何存储记录,怎么从表中读取数据,怎么把数据写入具体的物理存储器上
这都是存储引擎负责的事情。

一条查询语句是如何执行的?

概述

  1. 连接器建立连接
  2. 客户端发送一条查询语句给服务器
  3. (废弃)服务器先检查查询缓存, 如果命中了缓存, 则立刻返回存储在缓存中的结果。 否则进入正式的查询阶段
  4. 分析器进行词法分析和语法分析知道这是一条查询语句。
  5. 优化器会用最好的方式去优化这条 SQL 语句,并生成一条条的执行计划,比如你创建了多个索引,MySQL 会依据成本最小原则来选择使用对应的索引
  6. 执行器首先校验权限,权限通过则根据优化器生成的执行计划, 调用存储引擎的API来执行查询。将结果返回给客户端

图示
在这里插入图片描述

详述

  • 建立连接
    客户端进程与服务器进程TCP三次握手建立连接,每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,直到该客户端退出时线程才会被销毁。

  • 查询缓存
    命中缓存返回缓存数据,未命中走正式查询

  • 分析器:要做什么
    分析器先会做词法分析,识别出里面的字符串分别是什么,代表什么。
    然后做语法分析。根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个 SQL 语句是否满足 MySQL 语法。如果不满足则会报错,满足才会进入优化器。

  • 优化器:该怎么做
    MySQL的优化程序会对我们的语句做一些优化,如选择什么索引等等。优化的结果就是生成一个执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的。MySQL再依照这个执行计划和存储引擎进行交互.

  • 执行器:执行并返回结果
    开始执行的时候,要先校验一下你对这个表 T 有没有执行查询的权限
    如果没有权限,就会返回没有权限的错误。
    权限通过后。执行器打开表(现在才打开表),调用存储引擎的API来进行数据操作。

为什么废弃查询缓存?
因为查询缓存往往弊大于利
查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。因此很可能你费劲地把结果存起来,还没使用呢,就被一个更新全清空了。对于更新压力大的数据库来说,查询缓存的命中率会非常低。

一条SQL更新语句是如何执行的?

整体流程:

  1. 连接器与客户端建立连接
  2. 客户端发送一条更新语句给服务器
  3. 分析器进行词法分析和语法分析知道这是一条更新语句。
  4. 优化器会用最好的方式去优化这条更新语句,并生成一条条的执行计划,比如你创建了多个索引,MySQL 会依据成本最小原则来选择使用对应的索引
  5. 执行器首先校验权限,权限通过则根据优化器生成的执行计划, 调用存储引擎的API来执行查询。找到这一行,然后更新。最后将更新是否成功返回给客户端。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值