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

目录

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.mzph.cn/news/619772.shtml

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

相关文章

C++20结构化绑定应用实例(二百五十六)

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

Neonode触摸传感器模块之I2C鼠标和键盘

引言 触摸传感器模块可用于通过I2C向计算机发送键盘或鼠标输入。Arduino Library示例zForceKeyboardMouse中包含了如何实现这一点的示例。该示例使用官方的Arduino库<Mouse.h>和<Keyboard.h>与主机系统通信。 zForceKeyboardMous…

VR转接器:打破界限,畅享虚拟现实

你是否曾梦想过踏入另一个世界,体验那种仿佛置身其中的感觉?随着科技的飞速发展,虚拟现实(VR)已经成为了现实。而VR转接器,正是让你畅享虚拟现实的关键所在。 添加图片注释,不超过 140 字&…

猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》…

Web前端 ---- 【Vue3】vue3中的组件传值(props、自定义事件、全局事件总线)

目录 前言 props 自定义事件 全局事件总线 安装第三方库mitt 封装event-bus.js文件 使用全局事件总线 清除全局事件绑定 前言 本文介绍在vue3中的组件传值,props、自定义事件以及全局事件总线。相较于vue2中,略有变化。关于vue2中的组件传值看这篇…

vscode运行Python的两种方法,及无法运行的原因

vscode运行Python代码 下面介绍的vscode运行Python代码的方法基于的一个前提条件是:当前的计算机已经安装好了Python,且已经配置好了相关的环境变量。如果要查看是否已经都安装好了,可以打开Windows系统的命令行工具Windows PowerShell&…

鸿蒙(HarmonyOS)应用开发指南

1. 概述 1.1 简介 鸿蒙(即 HarmonyOS ,开发代号 Ark,正式名称为华为终端鸿蒙智能设备操作系统软件)是华为公司自 2012 年以来开发的一款可支持鸿蒙原生应用和兼容 AOSP 应用的分布式操作系统。该系统利用“分布式”技术将手机、电…

vue、element-ui使用el-tooltip判断文本是否溢出

1.需求:需要实现文本单行显示,超出时,使用省略号,划过该文本时使用tooltip显示全部文本。需要考虑数据是由接口动态获取,只有溢出文本鼠标滑过时显示全部文本,没有溢出的则不需要。 2.实现: 第…

img标签的奇怪问题

本来只是为实现一个轮播图,img的url地址是从后端接口获取的,但不巧的是url地址的图片都过期了。 因为懒得重新到网上找图,就想直接用一下本地的图片,简单的想法遇到一堆问题。 问题一: 因为是springboot项目&#xf…

windows11通过虚拟机安装Ubuntu20.04

VMware 分为 VMware Workstation Pro 和 VMware Workstation Player, Pro体验期后收费,Player则免费。player 早期不能创建虚拟机,只能Pro创建好后给Player运行,而现在player早已加入创建虚拟机功能,所以使用体验上两者相差不大&a…

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

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

swing快速入门(四十)JList、JComboBox实现列表框

注释很详细,直接上代码 上一篇 新增内容 🧧1.列表的属性设置与选项监听器 🧧2.下拉框的属性设置与选项监听器 🧧3.Box中组件填充情况不符合预期的处理方法 🧧4.LIst向Vector的转化方法 源码: package swing…

OpenCV 基于C++图像读取及存储API函数

OpenCV可以从存储介质中读入图像,也可以将摄像头(Camera)抓取的图像载入内存,然后进行处理。而存储图像就是将内存中的图像数据写入存储介质中,如写入硬盘、优盘等。 OpenCV要读入图像、操作图像。首先要用到Mat类,并且需创建Mat对…

mysql 获取距离某点最近的数据

方式一 算法:st_distance (POINT ( latitude, longitude ),POINT ( 106.695823, 26.574557 )) * 111195 SELECT*,st_distance (POINT ( latitude, longitude ),POINT ( 106.695823, 26.574557 )) * 111195 AS distance FROMtest_distance ORDER BYdistance DESC…

理想汽车迎来新算力平台负责人,内部化名为张一粟;王者荣耀在抖音直播全面开放;陈楚生等人现身央视春晚彩排

今日精选 • 理想汽车迎来新算力平台负责人,内部化名为张一粟。目前理想内部暂未公布其内部职级• 王者荣耀在抖音直播全面开放• 陈楚生等人现身央视春晚彩排 投融资 • 2023年12月份,中国社会融资规模增量为1.94万亿元• OpenAI 支持的人形机器人公司 1X 完成 …

mybatis之动态sql、if\choose\when\otherwise\trim\where\set\foreach\bind有案例

mybatis之动态sql 动态SQLif元素choose 、when 、otherwise 元素trim 、where 、set 元素foreach 元素bind 元素 动态SQL 定义:根据不同条件拼接SQLy语句,实现对数据库更准的操作。 实现方式:映射器配置文件或者注解 常用动态SQL元素&…

oracle-事务一系列理解

一个事务开始后,会被分配一个唯一的id号,xid,xid不仅是一个编号也是一个地址。 事务表 存在undo表空间的某一个段的段头块,最多存放47个事务,事务开始的时候,先将信息写入这个表,所以一个undo段…

css宽度适应内容

废话不多说,看如下demo,我需要将下面这个盒子的宽度变成内容自适应 方法有很多,如下 父元素设置display:flex 实现子元素宽度适应内容 如下给父元素设置flex能实现宽度自适应内容 <!DOCTYPE html><html lang"en"><head><meta charset"U…

我开源了一个 Go 学习仓库

前言 大家好&#xff0c;这里是白泽&#xff0c;我是21年8月接触的 Go 语言&#xff0c;学习 Go 也正好两年半&#xff0c;我决定重启我之前未完成的计划&#xff0c;继续阅读《The Go Programing Language》&#xff0c;一年多前我更新至第五章讲解的时候&#xff0c;工作的忙…

K8S--daemonset小结

1、简介 1、daemonset中的pod会自动设置node.kubernetes.io/unschedulable污点的容忍度&#xff0c;所以即使一台机器被设置成无法调度&#xff0c;daemonset所控制的pod也会调度到该节点上。2、当有一个节点注册到K8S集群上的时候&#xff0c;daemonset控制器将会在该节点上运…