MySQL一条SQL语句的执行过程

MySQL一条SQL语句的执行过程可以大致分为以下几个步骤: 

mysq分层架构

为了理解这个问题,先从Mysql的架构说起,对于Mysql来说,大致可以分为3层架构。

网络连接层: 作为客户端和服务端的连接,连接器负责处理和客户端的连接,还有一些权限认证之类。比如客户端通用用户名密码连接到Mysql服务器,还有对于数据库表的执行权限。

服务层:基本上Mysql大部分的核心功能都在这一层,包括查询缓存、解析器、优化器之类,比如SQL解析、优化、索引选择,到最后生成执行计划。

存储引擎层:Mysql通过执行引擎直接调用存储引擎API查询数据库中数据。

SQL执行流程

1. 客户端发起sql请求

2. 客户端与MySQL服务器建立连接,这一阶段由连接器负责处理,包括进行身份验证和权限确认等。

3. 如果是select语句,MySQL会检查查询缓存,如果所需查询的结果已经存在于缓存中,便直接返回缓存结果,从而省略后续的查询过程。查询缓存可以提高查询效率,特别是对于重复执行的查询。(Mysql8.0已删除了查询缓存

4. MySQL 没有命中缓存,那么就会进入分析器,分析器核心功能包括语法检查,解析查询,生成解析树,语义检查。主要分三步:词法分析,语法分析和语义分析。

  • 词法分析:一条 SQL 语句有多个字符串组成,首先要提取关键字,比如 select,提出查询的表,提出字段名,提出查询条件等等。
  • 语法分析:根据MySQL的语法规则,将这些词法单元组织成一个解析树。
  • 语义分析:检查解析树中的元素是否在数据库中有对应的实体,并验证操作的合法性。

5. 通过查询优化器将解析树转化成执行计划。优化器的工作过程从语义上可以分为四个阶段:

  • 逻辑转换:包括否定消除、等值传递和常量传递、常量表达式求值、外连接转换为内连接、子查询转换、视图合并等;
  • 优化准备:例如索引 ref 和 range 访问方法分析、查询条件扇出值(fan out,过滤后的记录数)分析、常量表检测;
  • 基于成本优化:包括访问方法,连接顺序,索引的选择等;
  • 执行计划改进:例如表条件下推、访问方法调整、排序避免以及索引条件下推。

6. 更新数据前会先记录undo log,用于事物回滚和实现事物MVCC可见性。

7. 判断所在记录是否在buffer pool中。

8. buffer pool 中进行select和update。buffer pool 和 change buffer参考InnoDB 缓存-CSDN博客

  • 如果是select查询,如果记录存在buffer pool中就直接返回,如果不存在buffer pool中从磁盘读取之后放入buffer pool再返回。
  • 如果是update操作,如果记录存在buffer pool中就直接判断唯一键冲突和数据更新。如果不存在,唯一索引需要从内存中读取数据进行唯一健冲突校验,普通索引的话就把变更记录到change buffer。

9. 操作记录存入redo log(prepare),WAL用于事物崩溃恢复,以及将随机写转换成顺序写提升写入性能。

10-13. 提交事物, 写入binlog和commit redo log。 【MySQL】一文彻底搞懂 Redo-log 为什么要两阶段提交?_mysql redolog两阶段提交-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode 17.电话号码的字母组合

题目 思路 输入的digits有几个数就有几层。 一层中有几个数则取决于输入的数字对应的字母有几个。 1.确定递归函数的返回值及参数: 其实参数不是一开始就确定好的,而是你在写递归函数的时候缺啥,就往进去传啥。 这里我就直接全部写出来。…

无线基本认识和配置

1、无线局域网 IEEE 802.11标准 根据应用范围分类 WPAN --- 个人无线网络 NFC、ZIgbee、Bluetooth WLAN --- 无线局域网 WiFi,使用到WPAN技术 WMAN --- 无线城域网 WiMax 802.16 WWAN --- 无线广域网 GSM、CDMA、WCDMA、LTE、5G、TD-SCDMA 2、…

2012年认证杯SPSSPRO杯数学建模C题(第一阶段)碎片化趋势下的奥运会商业模式全过程文档及程序

2012年认证杯SPSSPRO杯数学建模 C题 碎片化趋势下的奥运会商业模式 原题再现: 从 1984 年的美国洛杉矶奥运会开始,奥运会就不在成为一个“非卖品”,它在向观众诠释更高更快更强的体育精神的同时,也在攫取着巨大的商业价值&#…

关东升老师力作!四本编程宝典,带你畅游编程世界

🌟《看漫画学C》:关东升老师以漫画的形式,让你在欢笑中轻松掌握C编程的核心知识。不再枯燥,不再难懂,让编程变得有趣又简单! 🎨《MATLAB科研绘图与学术图表绘制从入门到精通》:关东升…

c++的学习之路:15、list(2)

本章主要是讲模拟实现list,文章末附上代码。 目录 一、创建思路 二、构造函数 三、迭代器 四、增删 五、代码 一、创建思路 如下方代码,链表是由一块一块不连续的空间组成的,所以这里写了三个模板,一个是节点,一…

蓝桥杯第六届c++大学B组详解

前言: 看了很多博客以及视频讲解,感觉都不是很清楚,比较模棱两可,所以干脆自己一边想,一边写博客,也可帮助到其他人,都是根据自己的逻辑来尽量清楚简单的讲清楚题目,喜欢的不要吝啬三…

HTTP的介绍

一.什么是HTTP? Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 二.HTTP的特点 (1)基于TCP协议:面向连接,安全 (2)基于请求-响应模型的&…

卡奥斯工业互联网平台分析

一、 背景 卡奥斯是海尔推出的具有中国自主知识产权、全球首家引入用户全流程参与体验的工业互联网平台。其核心是大规模定制模式,通过持续与用户交互,将硬件体验变为场景体验,将用户由被动的购买者变为参与者、创造者,将企业由原…

【1】初识 Python

【1】初识 Python 1、编程语言(1) 语言(2) 编程语言(3) 如何利用编程语言与计算机交流(4) 常见的编程语言(5) 语法 2、Python 简介(1) 什么是 Python(2) Python 能做什么(3) Python 的由来(4) Python的特点① 语法精简② 生态好,开发效率高③ Python开发初体验&…

练习 21 Web [GXYCTF2019]BabySQli

SQL联合查询,注意有源码看源码,Base64以及32的区别,MD5碰撞 打开后有登录框,先随意登录尝试 只有输入admin才是返回wrong pass! 其他返回wrong user 所以用户名字段一定要输入admin 养成好习惯,先查看源码…

删除mysql表卡死 , 打不开,一直转圈圈

最近用navicat删除某一张表时,直接卡死转圈圈,导致navicat直接无响应, 想着是不是自己navicat有问题,换同事电脑来删这张表,还是同样问题。 多次尝试才整明白,根本不是navicat的问题.是mysql 的表锁死了! 如果频繁的对…

华三Sec Path

1、设备特点 外观: 功能特点: 安全特性: vFW的默认账号密码:admin 2、安全区域 1)相同安全级别的集合 2)默认的安全域 【1】区域 trust、untrust、local(所有有接口属于local,…

机器人开启私聊配置自定义接口的方式

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 今天给大家介绍一下,如何在机器人中开启私聊回复。 前提条件:机器人已经启动好了,且功能也都可以正常使用,如果没有启动,可以联…

一网打尽计算机网络难题:100个问答助你轻松掌握【文末送书福利】

文章目录 一,物理层二,数据链路层三,网络层四,传输层五,应用层专栏推荐粉丝福利 欢迎订阅查看学习:Java编程基础教程系列(零基础小白搬砖逆袭) 一,物理层 题&#xff1a…

【攻防世界】unseping (反序列化与Linux bash shell)

打开题目环境: 1、进行PHP代码审计,通过审计得知需要用到PHP反序列化。找到输出flag的位置为 ping()函数。通过使用 exec() 函数来执行 $ip 并将结果保存在 $result 中,最终输出 $result。 2、接着寻找给 $ip 传参的位置,发现通过…

VMware Esxi安装群辉系统

群晖的网络存储产品具有强大的操作系统,提供了各种应用程序和服务,包括文件共享、数据备份、多媒体管理、远程访问等。用户可以通过简单直观的界面来管理他们的存储设备,并且可以根据自己的需求扩展设备的功能。总的来说,群晖的产…

配置vscode用于STM32编译,Debug

配置环境参考: Docs 用cubemx配置工程文件,用VScode打开工程文件。 编译的时候会有如下报错: vscode出现process_begin :CreateProcess failed 系统找不到指定文件 解决方案:在你的makefile中加上SHELLcmd.exe就可以了 参考…

云his系统源码 java源码saas模式 二甲医院his系统全套源码 数据库MySQL + MyCat

基层医院云HIS系统源码 一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能,还能与公卫、PACS等各类外部系统融合&…

JavaWeb--JavaScript Part 01

1. JavaScript概述 JavaScript(简称JS)是一种轻量级的、解释执行的客户端脚本语言,主要用于增强网页的交互性和动态性。它起源于Netscape的LiveScript,并在1995年发布时更名为JavaScript。尽管名称中包含"Java"&#xf…

leetcode.707. 设计链表

题目 题意: 在链表类中实现这些功能: get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。 addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的…