一条sql查询语句在mysql中的执行过程是什么

mysql的连接器

        我们想要在mysql中执行一条sql查询语句,首先需要连接到mysql服务,那么客户端首先要向mysql服务端发起连接请求,我们可以在客户端用mysql -h [ip] -P [port] -u 用户名 -p 密码  命令向服务端发起连接请求,这个连接请求会先到达mysql的连接器,连接器负责校验我们的用户登录身份,连接器会去mysql的用户权限表查询用户信息进行身份校验,身份校验如果不通过,mysql会向客户端返回错误信息,并且拒绝这次连接;身份验证如果通过了,那么mysql会去创建一个客户端和服务端之间的连接,连接有长连接和短连接,它们适用的场景不同,长连接在建立以后需要长时间保持连接状态,在长时间内的多次sql操作都在这同一个连接上进行,虽然省去了连接创建和销毁的开销,但是它在服务端长时间保存会造成服务端内存开销,如果我们的系统是高并发的,那么会导致很多长连接占用服务端的内存,所以长连接只适用于一次连接之后需要长时间频繁进行数据库访问的非高并发系统;而如果我们的系统要面对高并发访问,那么应该用短连接,短连接是一次连接之后,执行一次sql或者短时间内的有限的几次sql查询之后就将连接关闭的连接形式,它适用于高并发的业务场景。连接器在为客户端创建了连接之后,查询就进入了下一步:mysql的查询缓存。

mysql的查询缓存
        执行查询的时候,mysql会先去查询缓存中查询,mysql用查询缓存缓存了之前执行过的查询结果,查询结果在缓存中用key-value键值对的格式进行存储,key是查询sql语句,value是它对应的查询结果;如果本次查询命中了缓存,那么就直接返回缓存中的结果,避免了真正的数据库查询,提高了查询效率;如果没有命中缓存,那么进入下一步:mysql分析器

mysql分析器
        mysql分析器包括词法分析器和语法分析器,分别对我们的sql语句进行词法分析和语法分析。词法分析器会先将sql语句进行分词,我们的sql语句是由多个字符串和空格组成的,词法分析器会以空格作为分隔符将sql进行分词,得到分词结果集后便知道了这条sql要实现的操作意义了,然后再用语法分析器对sql进行语法分析,如果这个sql不符合sql语法规则,则向客户端返回you have an error in your sql syntax这个错误信息,并拒绝本次查询;如果这个sql符合语法规则,则进入下一步:mysql优化器

mysql优化器
        mysql优化器的作用是根据我们的sql语句制定执行方案,制定一个能让这个sql实现最高的执行效率的执行方案,执行方案制定完毕,进入下一步:mysql执行器

mysql执行器
        mysql执行器的作用是去执行sql语句,它会打开我们的sql所要访问的表,然后调用这张表的引擎所提供的接口去执行sql查询,查询完毕,将结果缓存到查询缓存并返回结果给客户端。

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

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

相关文章

16位S912ZVML32F3MKH、S912ZVML31F1WKF、S912ZVML31F1MKH混合信号MCU,适用于汽车和工业电机控制应用。

S12 MagniV微控制器是易于使用且高度集成的混合信号MCU,非常适合用于汽车和工业应用。S12 MagniV MCU提供单芯片解决方案,是基于成熟的S12技术的完整系统级封装 (SiP) 解决方案,在整个产品组合内软件和工具都兼容。 S12 MagniV系统级封装 (S…

通过IDEA发送QQ邮箱信息

先创建一个普通的Maven项目&#xff0c;我就不演示啦&#xff0c;个人博客已经写过~[创建一个maven项目]。 项目创建成功后&#xff0c;引人Maven依赖&#xff0c;如下: <dependencies><dependency><groupId>org.apache.commons</groupId><artifact…

在k8s集群内搭建Prometheus监控平台

基本架构 Prometheus由SoundCloud发布&#xff0c;是一套由go语言开发的开源的监控&报警&时间序列数据库的组合。 Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态&#xff0c;任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的…

大数据_Hadoop_Parquet数据格式详解

之前有面试官问到了parquet的数据格式&#xff0c;下面对这种格式做一个详细的解读。 参考链接 &#xff1a; 列存储格式Parquet浅析 - 简书 Parquet 文件结构与优势_parquet文件_KK架构的博客-CSDN博客 Parquet文件格式解析_parquet.block.size_davidfantasy的博客-CSDN博…

Redis学习路线(6)—— Redis的分布式锁

一、分布式锁的模型 &#xff08;一&#xff09;悲观锁&#xff1a; 认为线程安全问题一定会发生&#xff0c;因此在操作数据之前先获取锁&#xff0c;确保线程串行执行。例如Synchronized、Lock都属于悲观锁。 优点&#xff1a; 简单粗暴缺点&#xff1a; 性能略低 &#x…

Qt 4. 发布exe

把ex2.exe放在H盘Ex2文件夹下&#xff0c;执行 H:\Ex2>windeployqt ex2.exe H:\Ex2>windeployqt ex2.exe H:\Ex2\ex2.exe 64 bit, release executable Adding Qt5Svg for qsvgicon.dll Skipping plugin qtvirtualkeyboardplugin.dll due to disabled dependencies (Qt5…

go 查询采购单设备事项[小示例]V2-两种模式{严格,包含模式}

第一版&#xff1a; https://mp.csdn.net/mp_blog/creation/editor/131979385 第二版&#xff1a; 优化内容&#xff1a; 检索数据的两种方式&#xff1a; 1.严格模式--找寻名称是一模一样的内容&#xff0c;在上一个版本实现了 2.包含模式&#xff0c;也就是我输入检索关…

舌体分割的初步展示应用——依托Streamlit搭建demo

1 前言 去年在社区发布了有关中医舌象诊断的博文&#xff0c;其中舌象识别板块受到了极高的关注和关注。&#x1f60a;最近&#xff0c;我接触到了Python的Streamlit库&#xff0c;它可以帮助数据相关从业人员轻松搭建数据看板。本文将介绍如何使用Streamlit构建舌体分割的演示…

Java注解开发

注解开发 注解提供了更声明式和方便的方式&#xff0c;而编码方式允许更精细的控制和定制。 在Java中&#xff0c;当Redis充当缓存时&#xff0c;使用注解的方式更为常见和方便。Spring Framework提供了一种基于注解的缓存机制&#xff0c;称为Spring Cache。通过在方法上添加…

算法与数据结构-二分查找

文章目录 什么是二分查找二分查找的时间复杂度二分查找的代码实现简单实现&#xff1a;不重复有序数组查找目标值变体实现&#xff1a;查找第一个值等于给定值的元素变体实现&#xff1a;查找最后一个值等于给定值的元素变体实现&#xff1a;查找最后一个小于给定值的元素变体实…

大龄青年的浙大MBA读书梦——提面优秀190+的上岸经验分享

时间如白驹过隙&#xff0c;三十年的岁月也转瞬即逝&#xff0c;回首过往这三十年的人生路&#xff0c;没有大起大落&#xff0c;一直都是相对比较平稳。但这几年疫情原因&#xff0c;公司效益不好&#xff0c;不仅我们公司整个行业也都在裁员&#xff0c;为了让自己更具备竞争…

RSA非对称加密算法工具类

RSA非对称加密算法 工具类 package com.safedog.datasafe.system.utils;import cn.hutool.core.codec.Base64; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutoo…

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…

什么是架构 架构图

如何画架构图_个人渣记录仅为自己搜索用的博客-CSDN博客 什么是架构&#xff1f;要表达的到底是什么&#xff1f; Linus 03 年在聊到拆分和集成时有一个很好的描述&#xff1a; I claim that you want to start communicating between independent modules no sooner than you…

CAN转ETHERCAT网关将CAN 总线和 ETHERCAT 网络连接方法

由于好多现场会出现将CAN总线的设备接到EtherCAT网络中&#xff0c;由于协议的不相同&#xff0c;不能直接进行连接&#xff0c;现需一种能同时兼容CAN 总线和ETHERCAT网络的一种设备&#xff0c;由此捷米JM-ECT-CAN 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要…

Selenium开发环境搭建

1.下载Python https://www.python.org/downloads/ 下载下来选择自己创建的路径进行安装&#xff0c;然后配置环境变量 cmd命令框查看 2.安装selenium cmd命令框输入&#xff1a; pip install selenium3.下载pycharm https://www.jetbrains.com/pycharm/download/#sec…

CSDN 编程竞赛六十五期题解

竞赛总览 CSDN 编程竞赛六十五期&#xff1a;比赛详情 (csdn.net) 吐槽&#xff1a;本期问题较多&#xff0c;体验较差。 竞赛题解 题目1、数组排序 给你一个整数数组 nums&#xff0c;请你将数组按照每个值的频率降序排序。如果有多个值的频率相同&#xff0c;请按照数值…

Helm KinD kubectl krew Istio急速安装

本篇更新网上许多安装失效的工具&#xff0c;如krew和KinD。 本篇测试使用时间为2023/7/20&#xff0c;基本都为最新版本或最新稳定版本。 前置 Helm 是 Kubernetes 的一个包管理工具&#xff0c;用于简化 Kubernetes 应用的部署和管理。Helm 使用名为 "chart" 的打…

搭建测试平台开发(一):Django基本配置与项目创建

一、安装Django最新版本 1 pip install django 二、创建Django项目 首先进入要存放项目的目录&#xff0c;再执行创建项目的命令 1 django-admin startproject testplatform 三、Django项目目录详解 1 testplatform 2 ├── testplatform  # 项目的容器 3 │ ├──…

getInputStream has already been called for this request 问题记录

问题背景 HttpServletRequest.getReader() HttpServletRequest.getInputStream() 不能在过滤器中读取一次二进制流&#xff08;字符流&#xff09;&#xff0c;又在另外一个Servlet中读取一次&#xff0c;即一个InputSteam(BufferedReader)对象在被读取完成后&#xff0c;将无…