MySQL执行流程_执行一条select语句,期间发生了什么

这篇具有很好参考价值的文章主要介绍了MySQL执行流程_执行一条select语句,期间发生了什么。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


MySQL执行流程_执行一条select语句,期间发生了什么,mysql,mysql,android,adb

执行一条select语句,期间发生了什么

MySQL执行流程

MySQL执行流程_执行一条select语句,期间发生了什么,mysql,mysql,android,adb

  • server层负责建立连接、分析和执行SQL

    • 包括连接器、查询缓存、解析器、预处理器、优化器、执行器等,所有内置函数和所有跨存储引擎的功能在该层实现
  • 存储引擎层负责数据的存储和提取

    • 索引数据结构就是由存储引擎层实现,不同的存储引擎支持的索引类型也不相同

      • InnoDB支持索引类型是B+树,默认使用

      • 在数据表中创建的主键索引和二级索引默认使用B+树索引

第一步:连接器
连接mysql服务器
linux: mysql -h ip地址 -u 用户名 -p 密码

mysql基于TCP协议进行传输,需要三次握手

与客户端TCP三次握手建立连接 => 验证用户名、密码 => 连接器获取该用户权限(若管理员中途修改权限也不起效,需要新建连接才会使用新的权限设置)

如何查看 MySQL 服务被多少个客户端连接了?

show processlist

若用户的Command列状态为Sleep则说明这是一个空闲的连接

空闲连接会一直占用着吗?

不会,mysql定义了空闲连接的最大空闲时长,由wait_timeout参数控制,超过这个时间,连接器自动将它断开
    1. 查看最大空闲时长 
        show variables like 'wait_timeout'
    2. 手动断开空闲连接
        kill connection+id

一个处于空闲状态的连接被服务端断开后,客户端不会马上知道,等客户端发起下一个请求才会收到报错

MySQL的连接数有限制吗?

有,由max_connections控制

MySQL的长连接 vs. 短连接

短连接:
    连接mysql服务
    执行mysql
    断开
长连接:
    连接mysql
    执行mysql
    执行
    执行
    执行
    ....
    断开
使用长连接可以减少建立连接和断开连接的过程(推荐)
缺点:占用内存增多

怎么结局长连接占用内存的问题?

1. 定期断开长连接
2. 客户端主动重置连接
第二步:查询缓存

连接器完成工作后,客户端可以向mysql服务发送sql语句,mysql服务收到sql语句后,就会解析处sql语句的第一个字段,查看是什么类型的语句

select语句 => 在查询缓存里查找缓存数据(key-value形式存储,key:sql语句,value:查询结果) => 若命中,则直接返回value给客户端;若未命中,继续执行,执行完后查询结果存入查询缓存

缺点:对于更新频繁的表,只要一个表有更新操作,那么这个表的查询缓存就会被清空

mysql8.0开始删除查询缓存

第三步:解析SQL

解析器完成

  1. 词法分析
关键字 非关键字 关键字 非关键字
select username from userinfo
  1. 语法分析

根据语法规则,判断sql语句是否正确,若正确则构建SQL语法树,否则报错。

注意: 表不存在或字段不存在,不是解析器里做的(预处理器负责),解析器只负责检查语法和构建语法树

第四步:执行SQL

预处理阶段 => 优化阶段 => 执行阶段

  1. 预处理器
  • 检查SQL查询语句中的表或字段是否存在(不存在则报错)
  • 将select * 中的 * 符号扩展为表上所有列
  1. 优化器

为sql查询语句制定一个执行计划

优化器主要负责将sql查询语句的执行方案确定下来,表中有多个索引时,选择使用哪个索引

查看优化器使用了哪个索引

explain sql查询语句 (输出这条sql语句的执行计划)

查看执行计划的key

PRIMARY 主键索引

NULL 没有使用索引,全表扫描

例:覆盖索引

直接在二级索引就能查找到结果(因为二级索引的 B+ 树的叶子节点的数据存储的是主键值,就没必要在主键索引查找了,因为查询主键索引的 B+ 树的成本会比查询二级索引的 B+ 的成本大)

select id from product where id > 1 and name like 'i%'
extra为Using index,表明使用了覆盖索引优化
  1. 执行器

执行器与存储引擎进行交互,从存储引擎读取记录,返回给客户端文章来源地址https://www.toymoban.com/news/detail-759281.html

  • 主键索引查询(存储引擎定位符合条件的第一条记录)
  • 全表扫描(存储引擎读取表中第一条记录)
  • 索引下推

到了这里,关于MySQL执行流程_执行一条select语句,期间发生了什么的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL面试题:一条SQL语句在MySQL中执行过程全解析

    介绍一下下图涉及的一些组件的基本作用帮助大家理解这幅图。 连接/线程处理(连接器): 身份认证和权限相关(如连接处理、授权认证、安全等等)。 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除)。 解析器: 没有命中缓存的话,SQL 语句就会经过解析

    2024年02月03日
    浏览(31)
  • MySQL Select 语句执行顺序

    一条 SQL 查询语句结构如下: 但真正的执行步骤如下,执行时,每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入: 1. FROM 在这一步,无论后面跟那种联接运算(LEFT JOIN、RIGHT JOIN等),都首先执行交叉联接(CROSS JOIN),计算笛卡尔积,生成虚拟表 VT-1 2. ON 根

    2024年02月05日
    浏览(32)
  • 【MySQL系列】- SELECT语句执行顺序

    2.1 执行FROM操作 这一步需要做的是对FROM子句前后的两张表进行笛卡尔积操作,也称作为交叉连接,生成虚拟表VT1。如果FROM子句前的表包含a行数据,FROM子句后的表中包含b行数据,那么虚拟表VT1将包含a*b行数据。 2.2 应用ON过滤器 SELECT查询共有3个过滤流程,分别是ON、WHERE、

    2024年02月08日
    浏览(35)
  • Mysql的学习与巩固:一条SQL查询语句是如何执行的?

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于MySQL的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时:

    2023年04月13日
    浏览(68)
  • MYSQL实战45讲笔记--基础架构:一条SQL查询语句是如何执行的?

    MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层 :连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等

    2024年02月07日
    浏览(33)
  • MySQL中,SQL 查询总是先执行SELECT语句吗?

    在使用 MySQL 进行查询时,我们通常会使用 SELECT 语句,但是 SELECT 语句是否总是最先被执行呢?这是一个非常有趣的问题,本文将对此进行探讨。 在 MySQL 中,SQL 查询通常包括以下几个步骤: 语法解析 :MySQL 会对 SQL 查询语句进行语法解析,检查语句是否符合 SQL 语法规范。

    2023年04月09日
    浏览(33)
  • 从输入URL到网页显示,期间发生了什么(详解)

    Internet上的每一个网页都具有一个唯一的名称标识,通常称之为 URL (Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL 就是web地址,俗称“网址”。 URL格式 首先浏览器的第一步是对URL进行解析 ,从而 发送给Web服务器的请求信息。 假如说 没有

    2023年04月08日
    浏览(43)
  • 场景应用:键盘敲入字母a时,期间发生了什么?

    从下面个阶段一层层分析: 面试官:当你键盘敲入字母a时,期间发生了什么? 外行:很高兴有这次面试机会,再见! 面试官:… 面试官:当你键盘敲入字母a时,期间发生了什么? 小白:系统获取输入的值,应用程序捕获对其进行处理,屏幕上显示了搜狗输入法a的候选项

    2024年02月09日
    浏览(44)
  • 键盘敲入 A 字母时,操作系统期间发生了什么?

    关于8.1 键盘敲入 A 字母时,操作系统期间发生了什么?的总结,前面都介绍了,但是在最后总结操作系统发生了什么的时候,我觉得有点不详细,于是写一写自己的补充和理解,不一定正确。 键盘敲击之后, 键盘控制器根据敲击的键生成扫描码,写入寄存器 。 同时通过中

    2024年02月11日
    浏览(25)
  • 【操作系统】键盘敲入字母时,操作系统期间发生了什么?

    参考资料: 键盘敲入 A 字母时,操作系统期间发生了什么? 【操作系统】浅谈 Linux 中的中断机制 键盘可以说是我们最常使用的输入硬件设备了,但身为程序员的你,你知道「 键盘敲入字母时,操作系统期间发生了什么吗 」? 那要想知道这个发生的过程,我们得先了解了解

    2024年02月16日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包