MySQL运行过程及引擎

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

众所周知,数据库是开发不能跳过的门槛,操作数据库和设计数据库的能力高低在一定程度上决定程序员的技术。数据库的学习绝不仅仅是CRUD这么简单,其底层的运行也要有所了解。目前,我也在学习数据库知识中,同时也向大家推荐我所读的书——《MySQL是怎样运行的》

MySQL存取数据总流程

不多逼逼,直接上图

在这里插入图片描述
这张图可以将MySQL查询数据时的过程解释的很清楚,过程总共分为三步:连接管理,解析和优化,存储引擎,具体的可以往下看

连接管理

客户端和服务端的连接

客户端和服务端是怎么连接的呢?其实运行中的服务端程序和客户端程序都是计算中的一个进程,所以客户端向服务端发送请求,服务端响应请求的过程就是进程之间的通信,那么两台计算机之间的进程通信主要就是依靠TCP/IP来完成的。
在学习网络的时候都知道,每台计算机的IP是唯一的,而计算机运行中的进程所分配到的端口号也是唯一的,所以一般实现客户端和MySQL服务端之间的连接都是使用 IP+端口号 的形式完成的,MySQL的默认端口是 3306.

连接管理的作用

之前我们已经知道客户端和服务端的连接是依靠协议来完成的,那么连接管理在MySQL运行中起到的作用是什么?
首先要知道MySQL作为程序中获取数据的重要途径,项目上线后几乎使用者都会访问数据库,那么数据库的压力就非常大,如果不减轻那么程序就会出现卡顿甚至崩溃,也有一些人就是靠频繁访问数据库的方法使得某些软件崩溃。
为了应对高压力的访问,不仅程序员做出了努力,MySQL本身也在减轻访问压力,连接管理就是其中一种方式。
每当一个客户端 A 连接到服务端时,MySQL进程就会创建一个线程来处理客户端 A 的请求;当客户端 A 关闭连接之后,服务端并不会立即销毁线程,而是将其暂时缓存,等待下一客户端 B 连接时,将缓存的这个线程给客户端 B,这就是连接管理;线程的销毁和创建是比较消耗资源的,连接管理在一定程度上减轻了访问压力。

解析和优化

查询缓存

查询缓存顾名思义就是将每次新的查询语句的结果缓存,等到下次出现一模一样的sql语句的时候,直接将缓存作为返回结果,从而减少磁盘访问次数。
这就好比在学习数学计算 22 + 12 * 10 的时候,需要经过一定的计算得出 142 的答案,那么我再次询问的 22 + 12 * 10 时,你就可以不用经过计算告诉我是 142;
但是这也是在一段时间上的记忆,缓存也是如此,是有失效的时候的。每当MySQL监测到表的结构或者表的数据出现修改时,就会将表涉及到的语句全部删除。

查询缓存的删除

凡事有利有弊,查询缓存虽然减少了文件访问次数,但是其维护的成本也不小,比如每次查询都要导缓存表中检索、每次查询完毕之后都要检车更新缓存表、系统维护缓存表的内存空间等等,随着硬件的提升,查询缓存的成本渐渐高于了磁盘访问,所以在MySQL5.7.20版本就不推荐使用查询缓存了,甚至到MySQL8.0直接删除了此模块

语法解析

语法解析其实就和Java编译一样,对请求的sql语句进行语法解析,判断该sql具体需要什么操作

查询优化

程序员所写的SQL语句执行效率上可能不高,所以MySQL会对SQL语句进一步的优化,比如说外连接转换为内连接,表达式简化,子查询转变成连接等等,尽量提升SQL语句的执行效率。
查询优化模块的出现并不意味着程序员在书写SQL语句时不考虑SQL语句执行效率的问题,程序毕竟只是程序,面对较为复杂的语句时也是优化不了的,所以程序员仍需努力。

存储引擎

到目前为止都是MySQL优化查询的操作,没有对数据库中的真实数据进行操作。数据库将存取数据的操作都封装在了一起交给存储引擎处理。不同的存储引擎管理的表可能有不同的存储结构,所以存取数据的方法也有可能不同。
MySQL服务器将处理请求分成server层和存储引擎层。不涉及到真实数据的成为server层,比如上面说的解析和优化;存储引擎为server层准备了一系列的可以调用的接口,其中包含了几十个不同用途的底层函数。
所以在server层完成了查询优化之后,只需要按照执行计划调用引擎供应的接口获取到结果返回即可。
值得注意的是,server层和存储引擎之间的交互一般是以记录为单位的,即server层按照执行计划向存储引擎读取一条记录,server层依据条件进行比较(where),如果符合就发送给客户端;反之跳过,再次向存储引擎读取下一条记录

总结

  1. MySQL是客户端、服务端交互的程序,客户端发送请求到服务端,服务端处理请求后响应结果给服务端
  2. 客户端和服务端之间的通信方式是 IP + 端口号 的形式,MySQL在Windows环境下所依靠的是 TCP/IP 协议,在 UNIX 系统(例如 Linux)环境下是依靠 UNIX 套接字域
  3. MySQL处理请求的过程分为三步:连接管理、解析与优化、存储引擎,其中解析与优化又分为:查询缓存(MySQL 8 已移除),语法解析,查询优化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL是一个开源的关系型数据库管理系统。它使用SQL语言作为与用户进行交互的基础语言。MySQL运行过程可以简单分为四个步骤:连接、语句处理、结果处理和断开连接。 首先,当用户连接MySQL时,客户端会发送连接请求给MySQL服务器,以建立连接。MySQL在收到请求后,会根据用户名和密码进行验证并建立连接。 其次,当连接建立后,用户可以发送SQL语句给MySQL服务器。MySQL会解析SQL语句,并在执行前进行一系列的检查,例如是否存在语法错误和安全性检查等。当SQL语句验证通过后,MySQL执行相应的操作,例如插入、更新或查询数据等。在执行操作时,MySQL会根据数据存储引擎的不同,选择使用不同的方式来处理数据请求。 第三,当MySQL执行完SQL语句后,会将结果返回给用户。如果执行的SQL语句是一个查询命令,MySQL会将查询结果集返回给用户。返回的结果可能是一个整数值、一个文本字符串或一组数据记录等。 最后,在用户完成操作后,他可以选择断开与MySQL服务器的连接。MySQL会释放资源并清理内存,以便下一次请求时使用。 综上所述,MySQL运行过程是一个相对复杂的过程,它依赖于多个因素,如数据存储引擎、SQL语句的复杂度、连接的负载平衡和网络带宽等。理解MySQL运行过程能帮助我们更好地优化数据库的性能,提高系统的稳定性和可用性。 ### 回答2: MySQL是一种开源的关系型数据库管理系统。它是用来存储和管理数据的软件,可以支持很多不同的应用程序。MySQL运行过程可以分为三个部分:连接处理、查询处理和结果返回。 在连接处理阶段,应用程序将与MySQL建立连接。MySQL运行在服务器上,应用程序通过网络访问MySQL服务器。连接处理包括三个步骤:身份验证、设置连接信息和处理用户权限。 一旦连接建立,应用程序可以发送SQL查询语句给MySQL,并接收查询结果。在查询处理阶段,MySQL首先对查询进行语法分析和语义检查,然后将其转换为执行计划。执行计划定义了执行查询所需的操作。MySQL就会根据执行计划执行查询,并从数据表中检索所需的数据。 在结果返回阶段,MySQL将查询结果返回给应用程序。如果查询结果比较大,MySQL可以将其分成多个数据块,每块包含一部分查询结果。应用程序可以逐步接收这些数据块直到接收到完整的查询结果。一旦结果返回,应用程序可以根据需要处理查询结果。 总之,MySQL是一个高效的数据库管理系统,它可以通过网络与应用程序通信,并在服务器上存储和管理数据。MySQL运行过程包括连接处理、查询处理和结果返回三个阶段,它可以为应用程序提供可靠的数据存储和查询服务。 ### 回答3: MySQL是一种关系型数据库管理系统,它使用SQL语言作为管理和查询数据的工具。MySQL运行方式是客户端/服务器模型,客户端向服务器发送请求,服务器接收到请求后进行处理并返回结果。 在MySQL服务器中,有多个组件用于处理不同的任务。其中最重要的组件是MySQL服务进程,它负责处理所有与客户端的通信。服务进程接收到客户端请求后,会将请求传递给查询处理器进行处理。 查询处理器是MySQL的核心组件,它负责解析SQL语句并执行查询操作。查询处理器首先将SQL语句分解为语法单元,然后将其转换为内部表示形式。查询处理器会根据查询计划生成查询执行计划,该计划指定了如何从数据库中检索所需的数据。 MySQL还有其他一些组件,如存储引擎和缓存管理器。存储引擎是用于管理数据的组件,它们负责将数据存储在磁盘上,以及处理数据的读取和写入。缓存管理器负责管理查询缓存,以确保查询结果能够被快速检索和重用。 总的来说,MySQL运行是基于客户端/服务器模型,通过解析SQL语句、生成查询执行计划和处理数据等组件来实现。MySQL的稳定性和可靠性得到了广泛认可,它被广泛应用于众多网站和应用程序中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值