MySQL篇|02一条SQL执行的历程

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 当打开某一个数据库客户端,连接数据库,输入一条SQL语句,点击执行后输出其结果。执行的过程中,发生了什么?

当打开某一个数据库客户端,连接数据库,输入一条SQL语句,点击执行后输出其结果。执行的过程中,发生了什么?

客户端与 MySQL 的交互过程的原理图,如下图所示。

CgotOV14ySKAMxohAAH2VHcAzkE612.png

查询语句的轨迹

一条查询语句的轨迹是怎么样的?

select id from bas_student;
  • 客户端通过MySQL的Client Connection建立连接
  • 查询缓存。前提是开启查询缓存功能。开启了,在查询缓存过程中查询到完全相同的SQL语句时将查询结果直接返回给客户端,未开启或未查到数据则进入下一步
  • 前提是未开启查询缓存或开启了却没查到数据,进入解析器进行语法语义解析,生成解析树
  • 预处理器生成新的解析树
  • 查询优化器生成执行计划,其实就是选择最优的查询路径
  • 查询执行引擎执行SQL语句,通过执行器组件去执行,其根据执行计划,调用存储引擎的各种接口去执行SQL语句,查询到数据后不仅把结果返回给客户端,也将结果保存到查询缓存中

更新语句的轨迹

一条更新语句的轨迹时怎么样?

update bas_student set name = 'jasen' where id= 2021;

和查询语句的执行轨迹基本一致,但更新语句会涉及两个重要的日志模:redo log 重做日志 和 bin log 归档日志。

  • redo log prepare

    • 存储引擎将新记录更新到内存中,并将这个操作记录到redo log中,此时redo log 处于prepare状态,随时可以提交事务。
  • bin log

    • 执行器生成操作的bin log 并将bin log写入磁盘
  • redo log commit

    • 执行期调用引擎提交事务的接口,将redo log 状态改为commit

扩展

查询缓存功能很薄弱,MySQL8.0已废弃查询缓存功能

如果开启查询缓存,SQL语句必须完全都一摸一样,才能查到该结果,对于更新语句一摸一样的数据会比较少,且对于表中的数据如果更新了,该表的缓存也会失效。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
29天前
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
45 1
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
124 1
|
18天前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
32 0
|
18天前
|
SQL 关系型数据库 MySQL
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
mysql编写sql脚本:要求表没有主键,但是想查询没有相同值的时候才进行插入
30 0
|
1月前
|
SQL 存储 关系型数据库
mysql 数据库空间统计sql
mysql 数据库空间统计sql
45 0
|
1月前
|
SQL 存储 关系型数据库
mysql SQL必知语法
本文详细介绍了MySQLSQL的基本语法,包括SELECT、FROM、WHERE、GROUPBY、HAVING、ORDERBY等关键字的使用,以及数据库操作如创建、删除表,数据类型,插入、查询、过滤、排序、连接和汇总数据的方法。通过学习这些内容,读者将能更好地管理和操
13 0
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
22 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1
|
15天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
77 1