一文总结MySQL的指令是如何工作的

当你输入一条MySQL指令时候有没有想过会发生什么?

建立连接

首先你得先连到数据库上才行,这又分为长连接和短链接,短链接就是你查询一次就断开连接,长连接是你可以多次查询直到主动断开连接(也可能被杀死进程,当长连接达到设定数量上限,默认151个,连接线程可能会被杀死,也可以root手动杀死,也可能是长时间不执行指令后默认8h断开连接,这些服务器端的断开连接,用户不会立即知道,得等到再执行指令时候才会被告知)。TCP三次握手连接,四次挥手断开连接。

查询缓存

一个鸡肋的技能,MySQL8.0已经去除了。当你输入一个select语句,它把这个语句当作字符串key,去查询缓存中找你之前执行过这个命令不,执行过直接返回结果无需查表。为什么鸡肋,因为命中率很低,你一样的语句多打了一个空格就不行了,并且一旦表有增删改缓存中对应结果会被删去,你还得查表。

解析器

解析sql。先分析词法,拆分成关键词select、from等以及tablename等。再分析与法,会构建语法树,以为后续提供执行依据。这里如果有关键词不对会报错终止

预处理器

会先看你查的表在不在,查的字段在不在对应的表里,*会被扩展为所有字段名

优化器

会确定使用何种手段来执行查询,例如用主键还是索引,用哪种索引之类的。

执行器

具体执行sql语句,执行器会和存储引擎交互,主键索引查询、全表查询、索引下推是执行的三种方式。详见这篇文章

总体流程

图源小林coding
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机音乐弹奏播放DS1302万年历显示及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、DS1302计时显示年月日时分秒。 3、按键可以弹奏以及播放音乐,内置16首音乐。 二、硬件设计 原理图如下: 三、单片机软件设计 1、首先是系统初始化 /时钟显示**/ void init_1602_ds1302() { write…

RabbitMQ 集群和镜像队列

文章目录 一、clustering(集群)1、使用集群的原因2、搭建步骤2.1、拉取镜像2.2、创建三个RabbitMQ容器节点2.3、集群搭建 二、镜像队列1、使用镜像的原因2、搭建步骤 总结 一、clustering(集群) 1、使用集群的原因 如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等…

string类的总结

目录 1.为什么要学习string类 2.string的标准库 3.string类的常用接口说明 1.string类对象的常见构造 2.string类对象的容量操作 3.string类对象的3种遍历方法 3.1 [ ] 下标 3.2 基于范围的for循环 3.3 迭代器 4 string类对象的元素访问 4.1 operator[]: 4.…

【LearnOpenGL基础入门——3】绘制纯色三角形

目录 一.写在前面 二.顶点输入 三.顶点着色器 四.编译着色器 五.片段着色器 六.着色器程序 七.链接顶点属性 彩蛋 一.写在前面 我们先认识一下OpenGL常用的几个名词: 顶点数组对象:Vertex Array Object,VAO顶点缓冲对象:…

mysql客户端navicat的一些错误合集

关于mysql的客户端的使用的一些问题 问题描述: 在使用navicat prenium客户端的时候,连接数据库出现 Table ‘performance_schema.session_variables’ doesn’t exist 错误 解决方案: 首先找到mysql的bin目录 然后winR 进入到cmd界面 输入…

数据库迁移(DBeaver版本)

最近需要做一个数据库迁移, 测试环境开发的差不多了,需要将脚本迁移到生产。 中间了试了一些工具,比如Jetbrain出品的datagrip,这个数据库工具平时还是很好用的,但是数据迁移感觉不是那么好用,所以还是用到…

二元分类模型评估方法

文章目录 前言一、混淆矩阵二、准确率三、精确率&召回率四、F1分数五、ROC 曲线六、AUC(曲线下面积)七、P-R曲线类别不平衡问题中如何选择PR与ROC 八、 Python 实现代码混淆矩阵、命中率、覆盖率、F1值ROC曲线、AUC面积 指标 公式 意义 真正例 (TP)被…

图像分类系列(三) GoogLeNet InceptionV1学习详细记录

前言 ​ 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名——GoogLeNet 。 ​ 作为2014年ImageNet比赛冠军,GoogLeNet 比VGG更深的网络,比Alex…

虹科示波器 | 汽车免拆检修 | 2015款奔驰G63AMG车发动机偶尔自动熄火

一、故障现象 一辆2015款奔驰G63AMG车,搭载157发动机,累计行驶里程约为9.4万km。车主反映,该车低速行驶时,发动机偶尔会自动熄火,故障大概1个星期出现1次。 二、故障诊断 接车后路试,故障未能再现。用故障检…

MyBatis查询数据库(全是精髓)

1. 什么是MyBatis? 简单说,MyBatis就是一个完成程序与数据库交互的工具,也就是更简单的操作和读取数据库的工具。 2. 怎么学习Mybatis Mybatis学习只分为两部分: 配置MyBatis开发环境使用MyBatis模式和语法操作数据库 3. 第一…

【Gradle构件工具深度学习】

Gradle构件工具深度学习 1. 课程大纲1.1 Gradle入门1.2 与Idea整合1.3 Gradle进阶 2. 常见项目构建工具3. 安装gradle 1. 课程大纲 1.1 Gradle入门 基本介绍、常用指令、项目目录、项目应用 1.2 与Idea整合 Groovy语法、整合IDEA、搭建web工程、项目部署 1.3 Gradle进阶 生命周…

springboot jar包 无法读取静态资源文件

springboot jar包 无法读取静态资源文件 参考 springboot项目读取resources目录下的文件的9种方式 Resource resource resourceLoader.getResource("classpath:static/jkbw/jkbw4.txt");try{InputStream inputStream resource.getInputStream();BufferedReader r…

基于知识图谱+flask的大数据电影问答系统(超详细讲解及源码)

大数据知识图谱项目——基于知识图谱flask的大数据电影问答系统(超详细讲解及源码) 一、项目概述 知识图谱是将知识连接起来形成的一个网络。由节点和边组成,节点是实体,边是两个实体的关系,节点和边都可以有属性。知…

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于秃鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于秃鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

Spring初识

未来的几周时间,大概率我会更新一下Spring家族的一些简单知识。而什么是Spring家族,好多同学还不是很清楚,我先来简单介绍一下吧: 所谓Spring家族,它其实就是一个框架,是基于Servlet再次进行封装的内容。为…

Redis篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、Redis 为什么设计成单线程的?二、什么是 bigkey?会存在什么影响?三、熟悉哪些 Redis 集群模式?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,…

从0开始学习JavaScript--JavaScript 表达式与运算符

JavaScript中的表达式和运算符是构建逻辑、进行计算的基础。本文将深入研究JavaScript中各类表达式,包括算术表达式、关系表达式、逻辑表达式,以及运算符的使用方法,并通过丰富的示例代码来帮助读者更全面地了解和运用这些概念。 算术表达式…

【算法萌新闯力扣】:两个数组的交集

力扣热题:两个数组的交集 开篇 今天早上状态不错,花了较短的时间刷了4道力扣算法题。挑选了一道还不错的题目与大伙分享。 题目链接:349.两个数组的交集 题目描述 代码思路 看到题目后,想到可以把一个数组用集合存起来,然后用…

【Linux】 uptime命令使用

uptime 正常运行时间提供以下信息的单行显示。当前时间、系统运行的时间、当前登录的用户数量以及过去1、5和15分钟的系统平均负载。 语法 uptimeuptime命令 -Linux手册页 作者 由Larry Greenfield编写和迈克尔K约翰逊编写。 命令选项及作用 执行令 man uptime 执行命令结…