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

MySQL : 彻底搞懂一条SQL的执行过程

整体流程

在这里插入图片描述

组件介绍

连接器

处理客户端的连接,一般处理我们这个命令,判断是否满足接入server的条件

mysql ‐h host[数据库地址] ‐u root[用户] ‐p root[密码] ‐P root

查询缓存

在8.0之前,如果用户开启了查询缓存的开关,那么客户端发起请求连接之后,首先会去缓存中查询,缓存中存储的key是查询语句,value是 查询结果,如果缓存中没查到,就会执行下一步了,进入分析器阶段,当然了,如果查到缓存就回直接返回,如果对应的数据被update了,缓存将会同时被清除。

为什么8.0删除了缓存呢?

因为如果对一个表的数据更新压力比较大,就回导致这样一个现象:我刚把数据放进缓存后,过了一会就被更新数据操作,将缓存删除了,所以加入缓存就没有一点益处了,综合考虑之后,加入缓存这个鸡肋操作后,往往是弊大于利,索性在8.0就直接给删除了。

分析器

如果查询缓存没命中(或没有开启缓存),那么会直接来到这一层:分析器
进入分析器后,首先需要经过词法分析这一个关,如果这一关没过,就直接给你抛出错误了
通俗的来说词法分析器主要做了什么:

  • 解析所有关键词,如 select、update、insert、from、where、表名、字段名、group by 等
  • 如果解析出来的标识符不对,则会抛出异常,拒绝执行下一步

经过分析器之后,我们最终就能生成一个语法树,后续执行引擎执行语句,就得靠这个语法树进行

优化器

在经过分析器之后,mysql需要做的是对我们的sql进行一定的优化,那么它做了哪些优化呢

  • 决定使用哪个索引
  • 调整where 字段位置:如建立了一个联合索引 abc,但是我们的where 条件是这么写的 where b =1 and a=2 and c=4,这样写肯定不满足最左前缀匹配原则的,所以mysql决定给你优化下,直接调整成这样:where a=2 and b=1 and c=4,最终使用到了索引;但是如果 写成where b=1 and a=2,没有c字段,mysql是不会给你优化的。

执行器

调用不同的索引存储引擎API,执行解析后的sql,

相关文章:

  • 【成为红帽工程师】第三天 web服务器
  • 【Node.js实战】一文带你开发博客项目(API 对接 MySQL)
  • 鸿蒙开发套件全面升级,助力鸿蒙生态蓬勃发展
  • HTML期末大作业——游戏介绍(HTML+CSS+JavaScript) web前端开发技术 web课程设计网页规划与设计 Web大学生网页成品
  • 读书笔记:《高频交易员》
  • HTML小游戏6 —— 《高达战争》横版射击游戏(附完整源码)
  • 【深度学习】第三章:卷积神经网络
  • 几款很好看的爱心表白代码(动态)
  • C语言百日刷题第六天
  • 表白爱心代码
  • linux无界面手敲命令笔记
  • OSPF高级配置——虚接口,NSSA
  • 一专多能、创新力十足,南大通用GBase8c数据库获鲲鹏创新应用大赛金奖
  • WordPress设置浏览器切换标签网站动态标题
  • Python检测和防御DOS攻击
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【EOS】Cleos基础
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Django 博客开发教程 8 - 博客文章详情页
  • Java比较器对数组,集合排序
  • jquery ajax学习笔记
  • JS字符串转数字方法总结
  • python3 使用 asyncio 代替线程
  • React组件设计模式(一)
  • Spring Boot快速入门(一):Hello Spring Boot
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • windows下使用nginx调试简介
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 闭包--闭包作用之保存(一)
  • 分布式任务队列Celery
  • 汉诺塔算法
  • 聚类分析——Kmeans
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端面试之闭包
  • 区块链分支循环
  • 用jQuery怎么做到前后端分离
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 积累各种好的链接
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Spring-boot高级
  • #微信小程序(布局、渲染层基础知识)
  • (06)金属布线——为半导体注入生命的连接
  • (1)常见O(n^2)排序算法解析
  • (八)Spring源码解析:Spring MVC
  • (分布式缓存)Redis哨兵
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .net知识和学习方法系列(二十一)CLR-枚举
  • @JsonSerialize注解的使用
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] STL---仿函数与priority_queue
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [AAuto]给百宝箱增加娱乐功能
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法