MySql的sql语句执行过程详述

news2025/7/20 13:09:06

目录

前言:

sql语句的执行过程:

server层:

存储引擎:

连接器:

查询缓存:

分析器:

优化器:

执行器:


前言:

很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句的执行过程是怎样的,如果不了解执行过程的话,就很难进行sql语句的优化处理,也很难设计出来优良的数据库表结构。这篇文章主要是讲解一下sql语句的执行过程。

sql语句的执行过程:

客户端、连接器、分析器、优化器、执行器、存储引擎几个阶段。

连接器的作用:管理链接、权限验证的处理。

分析器的作用:词法分析、语法分析。

优化器的作用:执行计划的生成、索引选择。

执行器的作用:操作引擎、返回结果。

存储引擎的作用:存储数据、提供读写接口。

另外的一个分支是,会进行查询缓存的操作,如果命中了缓存则直接返回的操作。

mysql可以分为server层和存储引擎层两个部分:

server层:

包括链接器、查询缓存、分析器、优化器、执行器等,涵盖Mysql的大多数核心服务功能,以及所有的内置函数(日期、时间、数学、和加密函数等),所有的存储引擎的功能都在这一部分实现的,比如说存储过程、触发器、视图。

存储引擎:

主要负责数据的存储和提取,其架构模式是插件式的,支持InnoDB、Memory等多个存储引擎。最常用的是InnoDB,这个主要在Mysql5.5版本开始成为了默认存储引擎。

当在执行sql查询的时候,如果不指定引擎类型、默认使用的innoDB。当然也可以指定存储引擎类型进行处理,比如说创建表的时候,可以把存储引擎修改为memory,进行表的创建出合理。当然了,不同的存储引擎的表数据存储方式也是不一样的。

连接器:

执行sql语句的时候,第一步需要进行数据库的连接处理,连接器负责客户端建立连接、获取权限、维持和管理连接。

根据命令可以看出来,主要进行几个参数的输入,IP地址、端口号、以及用户名、密码的处理。连接mysql是客户端工具,用户服务器建立连接,进行tcp握手之后,连接器需要进行身份的验证,然后输入用户名、密码。

密码不对的时候,会收到一个“Access denied for user”的错误提示,然后客户端结束执行。

用户名、密码验证通过之后,连接器就会开始进行权限表查询权限,然后进行权限的操作处理。

连接完成之后,没有进行其他的操作,这个时候连接就处于空闲状态,show processlist。

客户端如果长时间不操作的话,默认的等待时间(wait_timeout)是八个小时。

数据库建立连接是比较复杂的,建议在项目中尽量少的建立连接的操作,也就是说尽量使用长连接的处理。

在项目中经常会遇到一种情况就是数据库的长连接,很长时间不关闭的操作,这个时候会导致内存的占用太大,被系统杀掉导致的Mysql的异常。

解决方案有下面两种方案:

  1. 定期断开长连接,使用一段时间之后,比如说执行一个占用内存的大查询之后,这个时候断开连接,之后要查询的话再重新连接。
  2. 通过使用命令进行重新初始化连接资源,这个时候需要重连,但是会把连接恢复到初始化的状态。

查询缓存:

连接建立完毕之后,进行查询缓存的处理,执行sql语句会先到缓存中看看是不是刚刚执行了这条语句,之前执行过的语句及其结果就会以key-value对的形式直接存储在内存中的,key是查询的语句,value是查询的结果,如果查询能够直接在这个缓存中找到key,那么这个value可以直接返回给客户端。

如果语句不在查询缓存中的话,就会继续后面的执行阶段,执行完成后,执行结果会被存入查询缓存中。如果可以查询到缓存的话,就不会进行后面的复杂操作了,效率会高很多。

查询缓存的弊端:

查询缓存失败一般情况下会比较频繁,只要对一个表的进行了更新的话,这个表上面所有的缓存就会被清空。因此一般情况下查询缓存的命中率很低。一般情况下,一个系统的配置表或者静态的表才会使用到查询缓存的方式进行处理。

分析器:

分析器首先会进行词法分析,输入的是由多个字符串和空格组成的一条sql语句,mysql需要识别出来里面的字符串分别是什么,代表什么意思。

首先:mysql从输入的select这个关键词识别出来,这个是一个查询的语句,需要把from关键字后面的,字符串t识别出来表名称等等的操作。

然后进行语法分析的处理,根据词法分析,根据词法分析的结果,语句分析器就会根据语法规则判断输入的这个sql语句是否满足mysql的语法。

检查出来错误提示如下图:

一般提示错误的信息只会进行第一个错误的位置。

优化器:

经过了分析器的处理,mysql就知道了该如何进行优化器的处理了,优化器的处理逻辑是在表里面进行多个索引的时候,决定使用那个索引,或者说在一个语句有多个关联的时候,决定各个表的连接顺序的情况,如下图所示:

第一种执行的结果是处理t1.c=10是否走索引,然后可以先判断 一下逻辑的结果是否一样,如果执行的结果是一样的话,可以任意选择一种方案进行处理。

执行器:

  1. 调用InNoDB引擎接口取这个表的第一行,判断值是否10,如果是10进行集中处理,否则的话就跳过。
  2. 执行器将遍历过程中所有满足条件的行组成的记录集合返回给客户端。

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

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

相关文章

【软件测试】测试人的bug一生,资深测试的专业角度......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 对于测试人员来说&a…

【Linux】进程的描述组织与进程状态

文章目录🎪 进程的描述组织🚀1.什么是进程🚀2.进程的形成🚀3.进程标识符 *⭐3.1 PS命令查看PID⭐3.2 /proc目录查看进程属性🚀4.父子进程⭐4.1 系统调用获取PID⭐4.2 fork创建子进程⭐4.3 fork双返回值问题⭐4.4 写时拷…

Netty源码解读-EventLoop(二)

一、简介 NioEventLoop的重要组成:Selector、线程、任务队列,他既会处理io事件,也会处理普通任务和定时任务. 1.下面是Selector,注意有两个哦后面会讲 2.下面的爷爷类提供的Thread变量,其实下面发excutor用的就是这个…

vue2中defineProperty和vue3中proxy区别

区别一:defineProperty 是对属性劫持,proxy 是对代理对象 下面我们针对一个对象使用不同的方式进行监听,看写法上有什么不同。 // 原始对象 const data {name: Jane,age: 21 }defineProperty defineProperty 只能劫持对象的某一个属性&…

TCP核心机制详解(三)

目录 前言: 滑动窗口 滑动窗口处理丢包问题 流量控制 拥塞控制 延时应答 捎带应答 面向字节流 异常情况 小结: 前言: 前两篇文章讲述了,TCP十种核心机制的前三种。这篇文章详细介绍其他的一些核心机制,让我们…

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害怎样解决?

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…

企企通持续助力全球管道预制先行者「迈科管道」,二期项目逐步启动

近日,国内管道预制龙头企业「济南迈科管道科技有限公司」签约企企通采购供应链系统二期项目。此次签约,将针对迈科管道的采购业务特点和需求,结合企企通采购与供应链管理系统优势和丰富的实战经验,在一期项目基础上,持…

山东科技大学校历 代码分析 获得以前学期学年的老版校历

校历-山东科技大学网络安全与信息化办公室http://tech.sdust.edu.cn/wlfw/xl.htm JavaScript var studyStart new Date(2021, 8-1, 30);//8-1 -1没有意义,30代表30号,2021年8月30号开始这个学期 var commonWeeks 19;//这个学期有多少周 var s…

Mysql使用规范(纯技术和实战建议)

1、事务隔级别: (强制):Repeatable-Read(重复读),且不能在会话操作时临时开启隔离级别。 注: Repeatable-Read(重复读)隔离级别解决不了幻读。 可用 show variables l…

Linux学习之环境变量

目录环境变量基本概念查看环境变量的方法常见的环境变量PATH:指定命令的搜索路径。PATH测试HOME:指定用户的主工作目录SHELL:当前Shell和环境变量有关的命令环境变量的组织方式通过代码来获得环境变量通过函数来获得环境变量环境变量具有全局…

集成AI智能安防平台EasyCVR时,调取录像接口报跨域错误的解决方法

EasyCVR视频融合平台基于云边端架构,可支持海量视频汇聚管理,能提供视频监控直播、云端录像、云存储、录像检索与回看、智能告警、平台级联、智能分析等视频服务。平台兼容性强,支持多协议、多类型设备接入,包括:国标G…

Datawahle组队学习——妙趣横生大数据 Day1

妙趣横生大数据 Day1[妙趣横生大数据 Juicy Big Data](https://datawhalechina.github.io/juicy-bigdata/#/?id妙趣横生大数据-juicy-big-data)一、大数据概述大数据——第三次信息化浪潮大数据概念大数据应用大数据关键技术二、Hadoop背景介绍特性项目架构实验1. 准备工作2. …

Tomcat 配置IPV6

文章目录一、场景二、tomcat开启ipv6三、ipv6环境配置四、访问总结一、场景 我们在linux下安装一个tomcat,启用ipv6的方式,然后在windows下用浏览器访问这个tomcat 二、tomcat开启ipv6 在server.xml配置文件的里面加上 address”[::]” ,这…

选择排序、快速排序、插入排序等经典八大算法稳定性分析

选择排序、快速排序、插入排序等经典八大算法稳定性分析稳定性定义:各排序算法的稳定性:一、冒泡排序二、选择排序三、插入排序四、快速排序五、归并排序六、希尔排序(shell)七、基数排序 :八、堆排序常用排序算法对比稳定性定义:…

代码的简单设计五原则

欢欢:“你看我的代码用了策略模式和状态模式,假如后面客户会有这样的需求,可以无缝扩展,多么健壮!” 清扬一脸狐疑,心中念叨了数遍 :“哼,过度设计!”,只见她…

APISpace 带你一起走进西湖美景

俗话说:“上有天堂,下有苏杭”。 “欲把西湖比西子,浓妆艳抹总相宜” 今天我就带大家走进杭州的西湖美景。自古以来,文人歌者面对西湖美景留下千古绝句,还以西湖为背景书写了一段段动人的爱情传说。 天生自带浪漫色…

医学生考研考博太卷,一篇文章轻松助力上岸——生物信息学及R语言基础知识之向量的运算(二)

考研考博太卷了,卷不过,想没想过本科发一篇文章呢? 330分考研人淘汰390分考研人这个故事,大家应该都知道吧。 本专栏带你六个月内,搞定一篇文章,本科生发文章也很容易。 在卷考研的同时,再卷一篇SCI,你就是新一任卷王。 本专栏教你不用花钱发一篇生信文章,从三个方…

态库、静态库之间的相互嵌套

本文的目的是测试各种类型库的编译后的使用效果,包括库又链接其他库的编译方法,使用方法,依赖性等。 太长不看版:请跳至文章最后的总结对比表。 一、内容包含: ①静态库libbb.a依赖静态库libaa.a的测试; …

学会分享,学会生活,分享5款简单易用的软件。

分享是一种博爱的心境,学会分享,就学会了生活。 1.在线图片编辑工具——佐糖 佐糖是一款在线免费图片编辑工具,采用AI人工智能技术,自动识别图片,支持一键抠图,更换背景,移除水印等。另外还提…

【向每个应用View中增加子控件 Objective-C语言】

一、把刚才计算九宫格的思路再给大家过一遍 1.现在我们要计算九宫格坐标 1)先把每一个格子,每一个九宫格的大小,先确定了, 在这里先指定宽和高 CGFloat appW = 75; CGFloat appH = 90; 2)再去计算第一个格子的一些间距, 到上面的间距,marginTop = 30; 再计算出…