MySQL-查询SQL语句的执行过程:连接器->查询缓存(8就没了)->分析器->优化器->执行器->返回结果

MySQL-查询SQL语句的执行过程:连接器->查询缓存<8就没了>->分析器->优化器->执行器->返回结果

    • 查询SQL语句的执行过程
      • 1、主要步骤
      • 2、实用案例

查询SQL语句的执行过程

1、主要步骤

MySQL中,一条查询SQL语句的执行过程非常复杂且精细,可以分为以下几个主要步骤

连接->查询缓存(8就没了)->分析->优化->执行->返回结果

1、连接器(Connection Handler)阶段

  • 客户端应用程序首先与MySQL服务器建立TCP连接。连接请求到达后,MySQL的连接器模块负责验证客户端的身份和权限
  • 如果用户提供了正确的用户名、密码及数据库名,连接器会分配一个线程来处理这个连接,并根据账户的权限信息确定该用户对哪些数据库或表具有访问权限。

2、查询缓存(Query Cache)阶段(已废弃自MySQL 8.0开始)

  • 在MySQL早期版本中,如果连接器完成授权后发现这是一个SELECT查询,它会首先查看查询缓存(假设查询缓存功能启用)
  • 查询缓存的工作原理是,如果之前有完全相同的SQL查询并且结果已经存储在缓存中,则直接返回缓存中的结果跳过后续的所有执行阶段,从而提高性能
  • 然而,由于查询缓存带来的维护成本和实际收益并不总是成正比在高并发或者数据更新频繁的情况下,缓存命中率低且可能导致大量的无效缓存失效,所以在MySQL 8.0之后的版本中移除了查询缓存功能

3、分析器(Parser)阶段

  • 查询无法从缓存中获取时,MySQL将对SQL文本进行词法分析和语法分析
  • 词法分析将SQL字符串拆解成一个个代表不同成分的符号(Token),比如关键词、标识符、常量值等。
  • 语法分析:根据MySQL SQL语法规则检查这些符号组成的序列是否符合语法规则形成解析树

4、优化器(Optimizer)阶段

  • 经过分析器确认SQL语句合法后优化器会对执行计划进行选择,决定如何最优地执行查询操作
  • MySQL通常提供多种可能的执行计划,如索引的选择、表的扫描顺序、JOIN操作的方式等。(可以explain查看)
  • 优化器通过成本估算模型(基于统计信息)选择预期成本最低的执行计划

5、执行器(Executor)阶段

  • 根据优化器生成的执行计划,执行器开始读取数据并进行相应的运算
  • 执行过程中,执行器会根据需要对涉及到的数据行加锁对于可重复读(REPEATABLE READ)事务隔离级别下的InnoDB存储引擎,还会应用Next-Key Locks来防止幻读
  • 对于涉及多表查询的操作,执行器按照JOIN条件逐步从每个表中检索符合条件的数据行

6、返回结果集

  • 执行器完成了所有数据检索和计算后,将结果集返回给客户端。

2、实用案例

笔者用的是MySQL8.0

-- 创建 customers 表
CREATE TABLE customers (id INT PRIMARY KEY,         country VARCHAR(255) NOT NULL  
);-- 创建 orders 表
CREATE TABLE orders (order_id INT PRIMARY KEY,      customer_id INT,              order_date DATE NOT NULL,     FOREIGN KEY (customer_id) REFERENCES customers(id)
);-- 插入数据

在这里插入图片描述

SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id WHERE customers.country = 'USA' AND orders.order_date >= '2020-01-01';

在这里插入图片描述

explain一下

在这里插入图片描述

针对这条SQL查询

  • 连接器会验证用户的登录信息以及对orders和customers表是否有查询权限。
  • 分析器解析SQL,识别出这是个SELECT查询,并正确理解JOIN和WHERE子句的含义。
  • 优化器评估使用哪个索引更高效(例如customers.country上的索引或者orders.order_date上的索引,甚至考虑联合索引),并决定JOIN的顺序。
  • 执行器根据优化器的决策锁定相关行,从customers表中找到国家为’USA’的客户记录,然后根据customer_id关联到orders表中对应的订单记录,最后筛选出2020年1月1日以后的订单。
  • 在整个过程中,MySQL服务器确保了并发控制的一致性和安全性,同时尽可能地优化查询效率。

MySQL-查询SQL语句的执行过程:连接器->查询缓存(8就没了)->分析器->优化器->执行器->返回结果 到此完结,笔者归纳、创作不易,大佬们给个3连再起飞吧

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

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

相关文章

day14_异常

今日内容 零、 复习昨日 一、日期类 二、异常 零、 复习昨日 1为什么要重写toString Object类toString返回的是对象名字地址,无意义子类重写toString() 返回的对象属性内容 2为什么要重写equals Object类equals判断是对象的地址值是否相等,无意义子类重写equals,为了判断对象的…

如何写一份简单的产品说明书,教程奉上

如果你是一位新晋产品经理&#xff0c;或者正在研发新产品&#xff0c;并且心中惴惴不安因为未知的产品说明书制作环节&#xff0c;那么今天你就来对地方了。本篇文章将教你如何创建一份简单明了的产品说明书。让我们开始吧&#xff01; 首先&#xff0c;明确产品说明书的目标。…

Leetcoder Day42| 动态规划part09 打家劫舍问题

198.打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

从新手到大师:顶级PPT学习网站推荐,让你的幻灯片脱颖而出!

介绍&#xff1a;PowerPoint&#xff0c;简称PPT&#xff0c;是微软公司开发的一款演示程序&#xff0c;也是Microsoft Office套件的重要组成部分之一。 PPT允许用户通过幻灯片的形式创建和展示信息&#xff0c;这些幻灯片可以包含文本、图形、图表、视频、音频等多种元素。用户…

Linux-网络-011

1网络协议模型 1.1【OSI】协议模型 1.1.1应用层 实际发送的数据应用层:HTTP 超文本传输协议HTTPS FTP 文件传输协议TFTP 简单文本传输协议SMTP 邮件传输协议MQTT TELNET ..1.1.2表示层 发送的数据是否加密1.1.3会话层 是否建立会话连接1.1.4传输层 数据…

解决 Chrome 无法代理外网,但Safari等其他软件可以

文章目录 1. 问题2. 解决方法 1. 问题 开启代理之后&#xff0c;Chrome 浏览器仍然无法访问外网。但是用 Mac 的 Safari 浏览器或者其他的软件已经可以访问外网。 2. 解决方法 发现 Chrome 浏览器的某些拓展程序会影响代理&#xff0c;可以关闭 Chrome 的拓展程序试试&#…

二维码门楼牌管理系统应用场景:数据管理的智慧新选择

文章目录 前言一、数据管理部门的智慧工具二、助力决策制定与优质服务提供三、二维码门楼牌管理系统的优势四、展望未来 前言 随着科技的飞速发展&#xff0c;二维码门楼牌管理系统正逐渐成为城市管理的智慧新选择。该系统不仅提升了数据管理效率&#xff0c;还为政府和企业提…

软件系统开发安全指南-word

应用系统设计安全主要涵盖以下几点&#xff1a; 1、应用系统架构安全设计 2、应用系统软件功能安全设计 3、应用系统存储安全设计 4、应用系统通讯安全设计 5、应用系统数据库安全设计 应用系统测试安全包含&#xff1a; 1、测试前置要求 2、测试方法及测试内容 3、测试环境及人…

idea Gradle 控制台中文乱码

如下图所示&#xff0c;idea 中的 Gradle 控制台中文乱码&#xff1a; 解决方法&#xff0c;如下图所示&#xff1a; 注意&#xff1a;如果你的 idea 使用 crack 等方式破解了&#xff0c;那么你可能需要在文件 crack-2023\jetbra\vmoptions\idea.vmoptions 中进行配置&#xf…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…

谷歌seo外链怎么发?

谷歌SEO外链建设&#xff0c;说白了&#xff0c;就是让别的网站放一条或几条链接指向你的网站&#xff0c;这事听着简单&#xff0c;但你凭什么在别人的地盘放自己网站的链接&#xff0c;就算真的能放自己网站的链接&#xff0c;你又是否能保证你发的内容跟自己网站相关&#x…

OpenStack之Nova

一 、Nova 使用OpenStack Compute来托管和管理云计算系统。 OpenStack Compute是基础架构即服务 &#xff08;IaaS&#xff09;系统的主要部分。 主要模块在Python中实现&#xff1a; 1因为认证&#xff0c;与OpenStack 身份认证keystone 交互。 2因为磁盘和服务器镜像&#xf…