myql进阶-一条查询sql在mysql的执行过程

news2024/9/22 18:26:15

目录

1. 流程图

2. 各个过程

2.1 连接器

2.2 分析器

2.3 优化器

2.4 执行器

2.5 注意点


1. 流程图

2. 各个过程

假设我们执行一条sql语句如下:

select * from t_good where good_id = '1'

2.1 连接器

首先我们会和mysql建立连接,此时就会执行到连接器。

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

我们执行sql之前首先要和数据库建立连接。建立连接时如果我们的用户名和密码不正确,那么就会收到“"Access denied for user”的错误提示。

2.2 分析器

建立连接后,我们输入的sql传给mysql。mysql的分析器就开始对这条sql进行分析。

分析器包括词法分析和语法分析。

词法分析:根据输入的sql,识别出来这条sql是由什么字符串组成的,例如上边sql是由select 、from 、t_good等组成,通过词法分析可知这是一条查询语句。

语法分析:词法分析之后,语法分析器就会根据语法规则,判断这条sql是否符合语法。如果不符合语法就会给出相应的提示。

提示如下:

这条语句我们把from写成了form,所以给了语法错误的提示信息。

2.3 优化器

优化器要做的事情是:决定这条查询语句如何执行。

例如:订单表中有多个索引,查询语句应该使用哪个索引进行查询。或者t1表联合t2表查询,到底先查询t1表的内容还是先查询出t2表中的内容呢?

而最终决定使用哪个索引或者哪种查询顺序是根据计算出来的cost来决定。

2.4 执行器

优化器决定了sql到底该如何执行,执行器就是负责按优化器的决定结果进行执行的。

2.5 注意点

查询缓存在mysql8.0版本已经去掉,此处并未提及。

查询缓存的原理:将已经执行过的语句及结果以key-value的形式进行存储,在分析器执行之前先查询是否有这个语句的缓存,如果有,那么执行返回结果。

查询缓存的实际效果:在实际的业务中我们的查询语句往往是动态,例如列表的多条查询,这会导致这个查询缓存的命中率很低。所以在生产环境不建议使用查询缓存。

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

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

相关文章

Java+Mysql存储过程生成订单序列号

Mysql存储过程生成唯一订单号 直接上代码!! 1.创建存储过程 CREATE DEFINERrootlocalhost PROCEDURE getOrderSerialNo(# 前缀in orderPrefix varchar(64), # 返回结果out result int) BEGIN# 当前流水号declare curOrderNo int;# 默认值为0declare e…

【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究

目录 主要内容 模型研究 结果一览 下载链接 主要内容 该模型以环境保护成本和运行成本为双目标构建了微电网优化调度模型,模型目标函数和约束条件复现文献《基于改进粒子群算法的微电网多目标优化调度》,程序的特点是采用非支配排序的蜣螂…

学习selenium+python使用 XPath 表达式来实现找到目标元素时智能封装等待,执行测试代码启动Chrome浏览器后,地址栏只显示data;

背景 学习使用 XPath 表达式来实现找到目标元素时智能封装等待执行测试代码启动Chrome浏览器后,地址栏只显示data; 代码如下 import unittest from selenium import webdriver from selenium.common.exceptions import NoSuchElementException from …

Java SE入门及基础(11)

程序调试 1. 什么是程序调试 当程序出现问题时,我们希望程序能够暂停下来,然后通过我们操作使代码逐行执行,观察整个过程中变量的变化是否按照我们设计程序的思维变化,从而找问题并解决问题,这个过程称之为程序调试…

ftp安装与配置 云服务器 CentOS7

1、FTP的安装 #安装 yum install -y vsftpd#设置开机启动 systemctl enable vsftpd.service#启动 systemctl start vsftpd.service#停止 systemctl stop vsftpd.service#查看状态 systemctl status vsftpd.service 2、配置FTP #修改前先进行备份文件 cp /etc/vsftpd/vsftpd…

LeetCode264. 丑数 II(相关话题:多重指针动态规划)

题目描述 给你一个整数 n ,请你找出并返回第 n 个 丑数 。丑数 就是质因子只包含 2、3 和 5 的正整数。 示例 1: 输入:n 10 输出:12 解释:[1, 2, 3, 4, 5, 6, 8, 9, 10, 12] 是由前 10 个丑数组成的序列。示例 2&am…

物联网协议Coap之Core和NetWork简介

目录 前言 一、Coap的Core包 1、Coap对象 2、Message对象 3、Request对象 4、Response对象 二、Coap的NetWork调试 1、UDP运行模式 2、Network消息接收 3、Sender线程发送数据 三、总结 前言 在之前的博文中,对Californium中Coap的实现进行了简要的介绍&a…

31 树的存储结构二

DIsplay() 递归显示 :图示 求树的高度时&#xff0c;递归的技巧 在递归的过程中&#xff1a;ret单独和任意一个子树的子高度比较&#xff0c;如果ret<max&#xff0c;retmax ------------- 注意&#xff1a;组织链表和子链表的【元素类型】都是TLNode* 链表都要先通过TLNod…

Matlab数学建模算法之模拟退火算法(SA)详解

&#x1f517; 运行环境&#xff1a;Matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 &#x1f510;#### 防伪水印——左手の明天 ####&#x1f510; &#x1f497; 大家…

分布式事务:构建无障碍的云原生应用的完美解决方案

目录 一、前言 二、分布式事务概述 2.1 什么是分布式事务 2.2 分布式事务的挑战 2.3 分布式事务的分类 三、传统解决方案分析 3.1 两阶段提交协议&#xff08;2PC&#xff09; 3.2 三阶段提交协议&#xff08;3PC&#xff09; 3.3 补偿事务 3.4 其他传统解决方案 四…

什么是梅尼埃病?

梅尼埃病&#xff08;Meniere’s Disease&#xff0c;MD&#xff09;作为耳鼻咽喉科常见的眩晕疾病&#xff0c;是一种原因不明的、以膜迷路积水为主要病理特征的内耳疾病&#xff0c;临床表现为反复的发作性眩晕、波动性听力下降、耳鸣和耳闷胀感&#xff0c;发病率约为5~20/1…

paypal贝宝怎么绑卡支付

一、PayPal是什么 PayPal是一个很多国家地区通用的支付渠道&#xff0c;我们可以把它理解为一项在线服务&#xff0c;相当于美国版的支付宝。你可以通过PayPal进行汇款和收款&#xff0c;相比传统的电汇和西联那类的汇款方式&#xff0c;PayPal更加简单和容易&#xff0c;被很…

WebRTC入门:基础的核心协议与概念(二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

如何将.NET 8.0的ASP.NET Core Web API部署成Windows服务

写在前面 前面写了一篇关于将.NET应用转换成Windows服务的方法&#xff0c;其实真正的目的是为了探索如何将Asp.Net Core Web Api 部署成Windows 服务。基于上一篇的基础&#xff0c;只需把创建 WebApplication 的代码放到 BackgroundService 的ExecuteAsync方法中即可。 其中…

redis夯实之路-集群详解

Redis有单机模式和集群模式。 集群是 Redis 提供的分布式数据库方案&#xff0c;集群通过分片( sharding )来实现数据共享&#xff0c;并提供复制和故障转移。集群模式可以有多个 master 。使用集群模式可以进一步提升 Redis 性能&#xff0c;分布式部署实现高可用性&#xff…

快速了解——逻辑回归及模型评估方法

一、逻辑回归 应用场景&#xff1a;解决二分类问题 1、sigmoid函数 1. 公式&#xff1a; 2. 作用&#xff1a;把 (-∞&#xff0c;∞) 映射到 (0&#xff0c; 1) 3. 数学性质&#xff1a;单调递增函数&#xff0c;拐点在x0&#xff0c;y0.5的位置 4. 导函数公式&#xff1a;f…

MySQL 和 Redis 如何保证数据一致性,通过MySQL的binlog实现

1、简介 MySQL 和 Redis 如何保证数据一致性&#xff0c;目前大多讨论的是先更新Redis后更新MySQL&#xff0c;还是先更新MySQL 后更新Redis&#xff0c;这两种方式在实际的应用场景中都不能确保数据的完全一致性&#xff0c;在某些情况下会出现问题&#xff0c;本文介绍使用 C…

Linux Debian12使用VSCode和Python搭建flask开发环境

一、安装VSCode 在Linux Debian12系统上安装VSCode教程可以参考网上相关教程。 二、安装Python 打开VSCode&#xff0c;安装python和python扩展包&#xff0c;如下图所示&#xff1a; 三、创建Python虚拟环境 1.新建文件夹testFlask 2.用vscode打开文件夹testFlask&#xf…

C++/WinRT 简介

C/WinRT 是 Windows 运行时 (WinRT) API 的完全标准新式 C17 语言投影&#xff0c;以基于标头文件的库的形式实现&#xff0c;旨在为你提供对新式 Windows API 的一流访问。 利用 C/WinRT&#xff0c;你可以采用任何符合标准的 C17 编译器创作和使用 Windows 运行时 API。 Wind…

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网&#xff1a;https://code.visualstudio.com/ 下载地址&#xff1a;https://code.visua…