面试官:请问一条select的语句的执行会发生什么?


文章目录

  • 前言:
  • 一:执行一条select的概览
  • 二:具体流程
    • 1:连接器
      • (1):步骤
      • (2):浅浅来一下细节
    • 2:查询缓存
      • (1):mysql5.8之前的幸福时光
      • (2):mysql5.8之后的悲惨结果
    • 3:解析器(解析sql)
      • (1):词法解析
      • (2):语法解析
    • 4.执行sql
      • (1):预处理阶段
      • (2):优化阶段
      • (3):执行器
      • (1):概述
      • (2):三种方式
        • a:主键索引查询
        • b:全表扫描
        • c:索引下推


前言:

不找工作的可能永远不知道今年找工作有多难 但还是乐观点 该学就学 该卷就卷 慢慢跟自己和解 终归会有offer的

一:执行一条select的概览

首先来一个概览
在这里插入图片描述
在这里的话整个select的过程分为两层server层储存引擎层

  • server层负责建立连接,分析和执行sql
  • 储存引擎层负责数据的储存跟提取

二:具体流程

1:连接器

(1):步骤

  • 与客户端进行 TCP 三次握手建立连接;
  • 校验客户端的用户名和密码,如果用户名或密码不对,则会报错;
  • 如果用户名和密码都对了,会读取该用户的权限,然后后面的权限逻辑判断都基于此时读取到的权限;

(2):浅浅来一下细节

  • 在连接的时候 我们要确保我们的mysql服务是启动的
  • 还有的是我们创建连接的时候我们创建的是长连接(没错在这里也分为长连接跟短链接 因为使用常连接的话 能避免我们频繁的创建跟断开连接) 但是长连接的话 往往比较占内存 mysql里的话采用的解决的策略的话是 定期断开长连接 跟 客户端主动断开连接

2:查询缓存

(1):mysql5.8之前的幸福时光

既然是缓存那肯定是把一些会重复访问的数据放到缓存中去 从而减少IO次数,提升性能.(往缓存中进行第一次添加数据 是我们已经在查询出来了一次结果 将其返回给客户端 并且将其储存在缓存当中方便下次再次查询的时候直接拿出来),缓存中的储存值的方式是key-value 就是将我们的sql语句设置为key 将我们上次查询出来的结果设置为value.如果没在缓存中查询到 那么我们就接在往下执行 等查询到结果后返回客户端同时在缓存中备份。

(2):mysql5.8之后的悲惨结果

那么这个缓存最大缺点就是我们需要频繁的更新 每当我们update一次的时候 就需要 清空缓存 那么的话 就会出现一个问题 我们刚创建好缓存,但是还没怎么用 就被一条update语句给清空了 那么想问是这个缓存存在意义是啥 ,出于这个原因的话 在mysql8.0之后 mysql中就没有了缓存。

3:解析器(解析sql)

(1):词法解析

mysql 根据你输入的sql遇语句解析出关键字,将关键字组成语法树,这样方便后续模块获取SQL模型,表名,字段名,where条件等

(2):语法解析

根据词法解析出来的结果,语法解析器主要干的就是查询你的sql语法是否正确。但要注意的是敲黑板了 关于sql语句中的字段是否存在表名是否存在 不是在这里检查出来的 是在下面的环节进行检查出来的(执行器的 预处理阶段)

4.执行sql

(1):预处理阶段

预处理阶段比如 我们查询的是select * … 在预处理阶段的话 那么的话 我们的需要将 这个 * 所代表的的一些字段给展示出来, 同时会检查字段的是否存在以及表名的是否存在。

(2):优化阶段

在优化阶段的话,比如我们在这个表中建立了多个索引,那么我们在执行的sql语句的时候 肯定要选择执行效率最高的那个作为索引进行查询我们的结果。 我们可以用 explain + sql语句 来看看我们的sql语句使用了什么索引

在这里插入图片描述

(3):执行器

(1):概述

经历完优化器后,就确定了执行方案,接下来 MySQL 就真正开始执行语句了,这个工作是由「执行器」完成的。在执行的过程中,执行器就会和存储引擎交互了,交互是以记录为单位的。根据执行计划执行 SQL 查询语句,从存储引擎读取记录,返回给客户端;

(2):三种方式

a:主键索引查询

b:全表扫描

就是查询条件不是索引的话 那么就会全表扫描,那么的话效率低下,每次查询结果都返回给server判断结果是否正确

c:索引下推

「下推」这个动作,下推到了哪里。索引下推能够减少二级索引在查询时的回表操作,提高查询的效率,因为它将 Server 层部分负责的事情,交给存储引擎层去处理了。没有索引下推的时候,每查询到一条二级索引记录,都要进行回表操作,然后将记录返回给 Server,
然后进行判断where条件是否符合 如果不符合储存引擎再进行查询。

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

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

相关文章

跟我一起学.NetCore之MVC过滤器,这篇看完走路可以仰着头走

前言MVC过滤器在之前Asp.Net的时候就已经广泛使用啦,不管是面试还是工作,总有一个考点或是需求涉及到,可以毫不疑问的说,这个技术点是非常重要的; 在之前参与的面试中,得知很多小伙伴只知道有一两个过滤器&…

彭博社:中企游说政府否决英伟达收购Arm

9月14日,英伟达与软银宣布达成最终协议,英伟达将以400亿美元的价格从软银收购ARM。在台积电明确于9月15日后不再向HW的ARM提供代工服务之后,一家美国公司又将ARM收入囊中,这使国产ARM CPU在设计和制造环节都存在巨大风险&#xff…

Explain各个字段的含义

文章目录[TOC]1:expanin的结果示例2:各个字段的含义(1):id(2):select_type(3):table(4):type(重要 我们利用索引查找出来的记录显示)(5): possible_keys(6):key(7):key_len(8):ref(8):rows(重要)(9):extra1:expanin的结果示例 mysql> explain select…

asp.net core监控—引入Prometheus(三)

上一篇博文中说到Prometheus有四种指标类型:Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要),并且我们做了一个Counter的Demo&#xff0c…

秋招日常(一天三封感谢信)

就离谱 上午收到两封 搞得复习贼没心态 下午打完球回来一看手机又收到一封 这个有点伤 自己测评完 笔试 笔试完 约面 技术面过了 hr又面 面完说等消息 我寻思hr面能有啥可挂的 就离谱 一想到自己经过那么多轮 还是挂了 就难受 什么鬼 求求了 给个offer吧 要不我快成了天天向下的…

asp.net core监控—引入Prometheus(一)

Prometheus是CNCF毕业的第二个项目,算是明星产品(可自行了解Prometheus的功能),asp.net core当然不能错过与之配套使用。在.net中是通过prometheus.net【https://github.com/prometheus-net/prometheus-net】引入的。上图是用Prom…

1024福利 | .NET社区联合清华大学出版社送好书来啦!

话不多说,直入主题。.NET社区各大公众号联合清华大学出版社为粉丝送上1024的福利,还请诸位笑纳!!!有哪些书呢?.NET并发编程实战 作者:[美] 里卡尔多特雷尔(Riccardo Terrell&#xf…

asp.net core监控—引入Prometheus(二)

上一篇博文中,说明了怎么引进Prometheus到asp.net core项目中,因为是Demo,所以Prometheus和Grafana都是windows版本,本地执行的,生产环境上这些服务可以根据的公司的架构,放到适合的环境内,现在…

ASP.NET Core Blazor Webassembly 之 渐进式应用(PWA)

Blazor支持渐进式应用开发也就是PWA。使用PWA模式可以使得web应用有原生应用般的体验。什么是PWAPWA应用是指那些使用指定技术和标准模式来开发的web应用,这将同时赋予它们web应用和原生应用的特性。例如,web应用更加易于发现——相比于安装应用&#xf…

TCP三次握手(详解)

一:引出 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西;由于TCP不存在连接的概念,只存在请求和响应,请求和响应都是数据包,它们之间都是经过由TCP创建的一个从客户端发起&#xf…

进击吧! Blazor !第五期 安全

Blazor 是一个 Web UI 框架,可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程,它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术,但它使用 C#语言和 Razor 语法代替 JavaScrip…

有一种无耻叫 “我是为你着想”

这是头哥侃码的第221篇原创十一之后,我的状态一直不好,总感觉胸口有东西堵着,时不时还会觉得呼吸困难。上周末,我咨询了几位有医学背景的朋友,有说是因为季节转换而造成的身体不适,不用在意,但也…

asp.net core监控—引入Prometheus(四)

上一篇博文中说到Prometheus有四种指标类型:Counter(计数器)、Gauge(仪表盘)、Histogram(直方图)、Summary(摘要),并且我们做了一个Counter的Demo&#xff0c…

[开源] .Net ORM FreeSql 1.10.0 稳步向前

写在开头FreeSql 是 .NET 开源生态下的 ORM 轮子,转眼快两年了,说真的开源不容易(只有经历过才明白)。今天带点干货和湿货给大家,先说下湿货。认识我的人,知道 CSRedisCore 是我写的另外一个开源组件&#…

CAP-微服务间通信实践

微服务间通信常见的两种方式由于微服务架构慢慢被更多人使用后,迎面而来的问题是如何做好微服务间通信的方案。我们先分析下目前最常用的两种服务间通信方案。gRPC(rpc远程调用)gRPC-微服务间通信实践场景:A服务主动发起请求到B服…

软件构造学习笔记-第二周

本周课程把第六章测试的内容提前讲了一部分,主要为实验1服务,讲了有关测试的概念、作用和基本方法。“测试优先”的思想是非常重要的,根据spec写出简单而全面的测试,在方法/类完成后第一时间对其进行测试,保证每个方法…

T-SQL | 你需要了解的执行计划

【T-SQL】| 作者 / Edison Zhou这是EdisonTalk的第297篇学习分享T-SQL是ANSI和ISO SQL标准的MS SQL扩展,其正式名称为Transact-SQL,但一般程序员都称其为T-SQL。本文是我学习《T-SQL查询》一书的读书笔记,为你讲解执行计划是个什么鬼。1关于执…

软件构造学习笔记-实验1

记录一下做实验1时遇到的问题。 准备工作 1.GitHub的注册和配置 由于之前没有接触过GitHub,所以碰到了一些问题。GitHub是什么?怎么建立GitHub远程仓库与本地仓库的连接?怎么在GitHub上传和下载文件? 实验完成后我可以简单回答上…

好的自我介绍,面试成功一大半

大家好,我是Z哥。关于面试时的自我介绍,我想大家遇到的情况都差不多,大部分面试的第一个环节基本都是这个。每个人也都知道留下好的第一印象很重要,但我估计很多人对这件事的解决方式,也就在网上找个自我介绍的模版就完…