当前位置: 首页 > news >正文

【MySQL】SQL语句执行流程

目录

一、连接器 

二、 查缓存

三、分析器

四、优化器

五、执行器


一、连接器 

学习 MySQL 的过程中,除了安装,我们要做的第一步就是连接上 MySQL

在一开始我们都是先使用命令行连接 MySQL

mysql -h localhost -u root -p 你的密码

 使用这个命令连接到数据库上,首先到达的就是连接器

连接器负责的职责就是跟客户端建立连接、获取权限、维持和管理连接 

当我们使用以上命令连接到 MySQL 服务端时,服务端会对密码、用户名进行验证(MySQL 默认的数据库中的 user 表中有用户信息)

如果输入的用户名密码不正确,服务端则会返回 “Access denied for user” 

反之,则会得到以下结果:

此时的连接器会到权限表中查询你的权限信息,之后你所进行的所有操作,都将依赖与此时读取到的权限信息 

二、 查缓存

建立完连接之后,你就可以在数据库中执行各种操作了(权限范围内)

此时如果你执行的是 select 语句,则会查询缓存,如果缓存中有该语句的执行结果,则会直接返回(之前执行过的 select 语句及其结果是以 key-value 的形式缓存在内存中)

但是大多数情况下是不建议使用缓存的!!!

缓存的失效非常频繁,每次对一个表进行更新操作,这个表上的查询缓存就会直接被清空 

但是 MySQL 也提供了 “按需使用” 的方式,可以将参数 query_cache_type 设置为 OFF,关闭查询缓存;也可以是用 SQL_CACHE 显式指定:

mysql> select SQL_CACHE * from user where id = 1

需要注意的是,MySQL 5.7 版本开始默认关闭了查询缓存,因为它的性能问题和维护成本较高。在 MySQL 8.0 版本中,查询缓存被彻底移除。 

三、分析器

到了这一步,MySQL 需要知道你要做什么操作,因此需要对你的 sql 语句进行解析

分析器首先做的就是 “词法分析” 。此时 MySQL 就会识别你的 sql 语句中的字符串分别是什么?代表的是什么?

识别完之后,就会进行 “语法分析”。根据词法分析的结果,语法分析器会根据语法规则判断你的 sql 语句是否满足 MySQL 的语法

如果语法存在错误,则会报错:

出现语法错误在提示内容中就会提示第一个出现错误的内容。

四、优化器

分析器分析完以后,语法没有存在错误,则会到达优化器。

在这里,MySQL 在知道你要执行的操作了,但是在真正开始执行这些操作之前,还需要经过优化器的处理。

优化器会在表中有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

同样的 sql 语句,如果表连接的顺序的不一致,最终的执行效率也会大不相同,而优化器的作用就是决定使用哪一种顺序方案。

 优化器优化完成后,此时才会真正执行 sql 语句

五、执行器

开始执行时,需要判断你是否有 sql 语句中的表的操作权限,如果没有,这是就会提示没有权限的错误。

如果有权限,就打开表继续执行。打开表时优化器会根据表的引擎定义去使用这个引擎提供的接口

慢查询日志有一个 rows_examined 字段,该字段表示语句执行过程中一共扫描了多少行。

在执行器每次调用引擎获取数据时累加的,但有时候执行器执行一次,引擎扫描了多行,所以两者之间并不是完全关联的 

一  叶  知  秋,奥  妙  玄  心 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 力扣题/图论/腐烂的橘子
  • VueX 使用
  • selenium 9222
  • ClickHouse集群的安装
  • 【C++指南】深入剖析:C++中的引用
  • 【大数据平台】数据存储、处理与分析
  • vue2子传值给父组件
  • 绘唐TK小说推文工具,聚星小说推文一键生成工具
  • nvidia jetson 系列开发板交叉编译方法,CUDA依赖程序
  • 免费分享:1900-2023中国大都市群自然灾害数据(附下载方式)
  • C语言:链表插入
  • qiankun微前端
  • 【MySQL进阶之路】表结构的操作
  • live2d + edge-tts 优雅的实现数字人讲话 ~
  • 【在线+sdwebui】在线免费运行stable-diffusion-webui (无需配置环境)
  • 03Go 类型总结
  • Javascript编码规范
  • js数组之filter
  • Node 版本管理
  • Python学习笔记 字符串拼接
  • spark本地环境的搭建到运行第一个spark程序
  • Spark学习笔记之相关记录
  • VUE es6技巧写法(持续更新中~~~)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 彻底搞懂浏览器Event-loop
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 排序(1):冒泡排序
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 深度学习入门:10门免费线上课程推荐
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 算法---两个栈实现一个队列
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 国内开源镜像站点
  • 如何在招聘中考核.NET架构师
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​ssh免密码登录设置及问题总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #pragma once与条件编译
  • (1) caustics\
  • (1)Jupyter Notebook 下载及安装
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (16)Reactor的测试——响应式Spring的道法术器
  • (27)4.8 习题课
  • (BFS)hdoj2377-Bus Pass
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (苍穹外卖)day03菜品管理
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)appium-desktop定位元素原理
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • *p++,*(p++),*++p,(*p)++区别?
  • .net 简单实现MD5
  • .net 连接达梦数据库开发环境部署