【MySQL基本功系列】第一篇 先熟悉MySQL的运行逻辑


我将推出一系列关于MySQL的博客文章,涵盖了从入门到深入底层的原理。这些文章将包括MySQL的运行逻辑、InnoDB存储引擎、SQL优化、undo log、bin log等多个方面的知识。希望这些文章能为你提供宝贵的信息和洞见,并帮助你更好地理解和应用MySQL。同时,非常欢迎各位读者提供反馈和建议,让我们一起共同进步。

在我们深入研究MySQL的底层原理之前,建议先对MySQL的运行逻辑和各核心组件之间的关系有一定的了解。在这篇博文中,我将为你简要介绍MySQL的运行逻辑和相关核心组件,这将有助于更好地理解MySQL的工作方式。

MySQL是一款强大的开源关系型数据库管理系统,采用了客户端-服务器架构,为应用程序提供了数据存储和检索等关键功能。通过理解MySQL的基本运行机制,我们可以更轻松地探索其更深层的技术细节。

MySQL的运行逻辑

让我们首先熟悉一下用户请求从发送到MySQL最终将数据写入磁盘的整个过程。这个过程涉及多个关键步骤,我将跟随以下流程图,逐一解释每一步骤。

在这里插入图片描述

简单描述一下流程图中每个部件的作用:

用户请求:

用户请求访问SQL查询、插入、更新或删除等操作。

连接池:

当我们需要与数据库交互时,首要任务是通过MySQL驱动与数据库建立网络连接。只有在成功建立连接之后,我们的应用程序才能执行增删改查等SQL操作。

然而,一个系统绝不仅仅只跟数据库创建一个连接,因为我们多线程处理的时候,如果仅有一个连接的话,各线程都要去抢夺一个连接去访问数据库,这样的多线程是没有意义的。

Tomcat中的多线程应用程序在每次需要访问数据库时,如果都是通过创建一个数据库连接、执行SQL语句,然后销毁连接,下一次再重新建立数据库连接,那肯定是效率很低下的。

所以,这个时候就可以引入了数据库连接池的概念,连接池在内部维护了一定数量的数据库连接,当线程需要连接数据库时,它可以直接从连接池中获取一个可用的连接,而不是每次都重新创建一个。使用完连接后,线程不需要销毁它,只需将连接返回到连接池中,以供其他线程继续使用。这种方式避免了频繁的连接创建和销毁过程,大大提高了效率。

常用的连接池有DBCP,C3P0,Druid等。

MySQL线程池:

MySQL服务器中维护了一个线程池,当一个客户端应用程序尝试连接到MySQL服务器时,MySQL服务器会接受这个连接请求。它会为每个连接分配一个线程来处理客户端的请求。这些线程在执行期间会处理SQL查询、更新、事务等操作。

SQL接口:

MySQL内部首先提供了一个组件,就是SQL接口(SQL Interface),他是一套执行SQL语句的接口,当MySQL的线程从网络连接中读取出来一个SQL语句之后,就会转交给SQL接口去执行。

SQL解析器:

MySQL的SQL解析器就是按照既定的SQL语法,对这个SQL按照SQL语法规则编写的SQL语句进行解析,然后理解这个SQL语句要干什么事情。如果SQL存在语法错误,解析器将生成错误消息。

查询优化器:

一旦确定了执行计划,查询优化器会评估不同的执行计划,选择最有效的执行方式。这可能涉及到索引的选择、连接操作的排序和过滤条件的应用,以最大程度地提高查询性能。

执行器:

查询优化器确定了执行计划后,将执行计划传递给执行器。执行器负责执行查询,检索或修改数据,并将结果返回给应用程序线程。

存储引擎:

MySQL支持多种存储引擎,如InnoDB、MyISAM等(目前一般都用InnoDB,我们后续的博文,也仅对InnoDB进行讲解)。存储引擎负责实际的数据存储和检索。它们处理数据的读写操作,可以将数据存储在内存或磁盘上,具体取决于存储引擎的类型和配置。

数据的写入:

存储引擎可以将数据写入内存缓冲区,然后定期将数据刷新到磁盘。这确保了数据的持久性,即使发生系统崩溃,数据也不会丢失。

END

以上大概就是MySQL大概的运行逻辑以及步骤,接下来,我将针对InnoDB存储引擎做一系列的更深入的介绍。

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

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

相关文章

打造高效运营底座,极智嘉一体化软件系统彰显科技威能

在仓储成本和物流需求日益增加的今天,创新且高效的物流机器人解决方案能够显著提升物流运营效率,降低物流成本,实现智能化、精益化、一体化的物流管理。全球仓储机器人引领者极智嘉(Geek)以「一套系统,天生全能」为准则&#xff0…

Linux /dev目录详解和Linux系统各个目录的作用

Linux /dev目录详解 在linux下,/dev目录是很重要的,各种设备都在下面。下面简单总结一下: dev是设备(device)的英文缩写。 /dev这个目录对所有的用户都十分重要。因为在这个目录中包含了所有Linux系统中使用的外部设备。但是这里并不是放的…

(蓝桥杯第十四届c解法,部分题目)​一、冶炼金属​二、飞机降落

2023年第十四届蓝桥杯大赛软件类省赛C/C大学B组真题 一、冶炼金属 题目: 问题描述 小蓝有一个神奇的炉子用于将普通金属 OO 冶炼成为一种特殊金属 XX。这个炉子有一个称作转换率的属性 VV,VV 是一个正整数,这意味着消耗 VV 个普通金属 OO…

阿里巴巴1688商品详情 API 接口示例

1688.item_get 公共参数 请求地址: https://o0b.cn/anzexi 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称(包括在请求地址中)[item_search,item_get,item_…

Windows ObjectType Hook 之 ParseProcedure

1、背景 Object Type Hook 是基于 Object Type的一种深入的 Hook,比起常用的 SSDT Hook 更为深入。 有关 Object Type 的分析见文章 《Windows驱动开发学习记录-ObjectType Hook之ObjectType结构相关分析》。 这里进行的 Hook 为 其中之一的 ParseProcedure。文章实…

7.spark sql编程

概述 spark 版本为 3.2.4,注意 RDD 转 DataFrame 的代码出现的问题及解决方案 本文目标如下: RDD ,Datasets,DataFrames 之间的区别入门 SparkSession创建 DataFramesDataFrame 操作编程方式运行 sql 查询创建 DatasetsDataFrames 与 RDDs 互相转换 使用…

创建基于多任务的并发服务器

有几个请求服务的客户端&#xff0c;我们就创建几个子进程。 这个过程有以下三个阶段&#xff1a; 这里父进程传递的套接字文件描述符&#xff0c;实际上不需要传递&#xff0c;因为子进程会复制父进程拥有的所有资源。 #include <stdio.h> #include <stdlib.h>…

如何再kali中下载iwebsec靶场

这个靶场有三种搭建方法&#xff1a; 第一种是在线靶场&#xff1a;http://www.iwebsec.com:81/ 第二种是虚拟机版本的&#xff0c;直接下载到本地搭建 官网地址下载&#xff1a;http://www.iwebsec.com/ 而第三种就是利用docker搭建这个靶场&#xff0c;我这里是用kali进行…

window10 定时任务

window10 定时任务 1、背景2、目标3、思路4、实操4.1、设置定时任务4.2、配置策略4.3、验证 1、背景 项目上由于业务调试需要&#xff0c;开具了一台window10系统&#xff0c;此台window10为项目组公共使用&#xff0c;为防止误操作分配了不通的账号&#xff0c;日常使用各自账…

react: 组件或页面卸载触发的钩子

Effects 可以返回一个 cleanup 函数 import { useEffect } from react let appDetailTimer null useEffect(() > {return () > {//如果定时器存在&#xff0c;推出页面时销毁定时器if (appDetailTimer) clearInterval(appDetailTimer)}}, [])

学习视频剪辑:巧妙运用中画、底画,制作画中画,提升视频效果

随着数字媒体的普及&#xff0c;视频剪辑已经成为一项重要的技能。在视频剪辑过程中&#xff0c;制作画中画可以显著提升视频效果、信息传达和吸引力。本文讲解云炫AI智剪如何巧妙运用中画、底画批量制作画中画来提升视频剪辑水平&#xff0c;提高剪辑效率。 操作1、先执行云…

聊聊logback的UNDEFINED_PROPERTY

序 本文主要研究一下logback的UNDEFINED_PROPERTY substVars ch/qos/logback/core/util/OptionHelper.java public static String substVars(String input, PropertyContainer pc0, PropertyContainer pc1) {try {return NodeToStringTransformer.substituteVariable(input,…

​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?

在当今汽车行业中&#xff0c;随着消费者偏好的多样化和年轻化&#xff0c;汽车制造商们正面临着前所未有的挑战与机遇。在2023年上海车展上&#xff0c;起亚汽车公司正式发布了全新紧凑级SUV——赛图斯。这款车型不仅标志着起亚对年轻消费市场的深入洞察&#xff0c;也展现了公…

物联网对接协议

物联网对接协议有很多种&#xff0c;以下是几种常见的物联网对接协议&#xff1a; Modbus&#xff1a;是一种强大的通信标准&#xff0c;广泛应用于工业自动化和SCADA系统&#xff0c;以便将仪表、传感器和执行器的信号发送回主控制器。 Modbus具有广泛的通信协议&#xff0c;…

Springboot+vue的导师双选管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的导师双选管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的导师双选管理系统&#xff0c;采用M&#xff08;model&a…

软件测试需不需要懂代码?

无论是刚入测试行业的萌新&#xff0c;还是已经在测试行业闯荡了两三年的小司机们&#xff0c;都会琢磨一个问题&#xff1a;如果要持续发展下去&#xff0c;我要不要懂代码&#xff1f; 在软件测试初级阶段&#xff0c;不需要编程能力。但是任何一个职业&#xff0c;都会追求…

数据库实验:SQL的数据控制

目录 数据控制实验目的实验内容实验要求实验过程实验内容提纲实验过程 数据控制 数据控制SQL语句(DCL)是一类可对用户数据访问权进行控制的操作语句&#xff0c;可以控制特定用户或角色对数据表、视图、存储过程、触发器等数据对象的访问权限。主要有GRANT、REVOKE、DENY语句操…

微服务之Nacos注册管理

文章目录 一、Nacos安装步骤1.安装地址2.安装版本3.目录说明4.端口配置5.启动 二、Nacos服务注册1.Nacos依赖2.客户端修改配置文件3.启动效果图4.总结 三、Nacos服务集群属性1.服务跨集群调用问题2.服务集群属性3.总结 四、Nacos根据集群负载均衡1.修改配置文件2.设置集群服务类…

一题都看不懂,大厂的面试是真的变态......

最近我的一个读者朋友去了字节面试&#xff0c;来给我发信息吐槽&#xff0c;说字节的面试太困难了&#xff0c;像他这种三年经验的测试员&#xff0c;在技术面&#xff0c;居然一题都答不上来&#xff0c;这要多高的水平才能有资格去面试字节的测试岗位。 确实&#xff0c;字…

浅析应急疏散照明设计在高层建筑中的应用

【摘要】作为工程设计人员&#xff0c;对高层建筑的应急照明设计应有足够的认识和重视&#xff0c;以保证在出现失火事件时&#xff0c;可以有效地引导建筑内的人员安全逃离、正确疏散&#xff0c;这是建筑设计的*大价值所在。在设计应急照明时&#xff0c;应根据当地的情况选择…