mysql查询请求处理过程

今天和大家分享一下mysql查询请求的处理过程,写的不好的地方多多包涵,话不多说,直接上图!
在这里插入图片描述

服务器程序在处理客户端发来的请求时,大致分3部分:连接管理、解析优化、存储引擎。接下来详细描述一下3部分做了什么。

一、连接管理

连接管理通俗的讲就是mysql客户端进程与服务端进程建立连接,建立连接的方式有以下三种。

1. TCP/IP连接

TCP/IP连接是最常用的一种连接,在使用mql命令启动客户端时,在-h参数后跟随IP地址来指定想要连接的服务器进程所在的主机地址,在-P(大写的P)参数后跟随服务器进程的端口号(默认3306),在-p(小写的p)参数后跟随mysql服务的密码,在-u参数后跟随mysql服务的用户名,例如一下命令,执行后便会与服务器进行连接。

mysql -h127.0.0.1 -P3306 -uroot -proot

2. 命名管道和共享内存

命名管道和共享内存是Windows操作系统中的两种进程间通信方式,了解即可。

命名管道方式进行通信:在启动服务器的命令上加上--enable-named-pipe 参数,然后在启动客户端命令中加上--pipe或者--protocol=pipe 参数。

共享内存方式进行通信:在启动服务器的命令上加上--shared-memory命令,将共享内存设置为客户端连接的默认连接方式。在启动客户端的命令中加上--protacol=memory参数来指定通过共享内存进行通信。
注意:共享内存方式进行通信时,客户端和服务端必须在同一台Windows主机中

3. UNIX域套接字

当客户端进程和服务器进程同一台操作系统为类UNIX的机器上时,可以使用该方式进行通信。如果启动客户端程序时没指定主机名或者指定主机名为localhost,或者指定--protcol=socket参数时,客户端就可以和服务端通过UNIX域套接字进行通信。

服务器程序默认监听的UNIX域套接字文件名称为/tmp/mysql.sock,客户端程序也默认连接到这个UNIX域套接字文件名称,可通过下面命令进行修改:

mysql --socket=/tmp/a.txt

如果服务器端更新了UNIX域套接字文件,客户端在启动时也要指定更新后的文件名称才能通过UNIX域套接字进行通信。

mysql -hlocalhost -uroot --socket=/tmp/a.txt -p

最后提一下,每当有一个客户端进程连接到服务器进程时,服务器进程就会创建一个线程与该客户端进行交互,当客户端断开连接时,这个线程并不销毁,而是缓存起来,等下一个客户端进程请求连接时,再把这个线程重新分配给新的客户端,从而节省服务器的开销。

二、解析与优化

客户端进程与服务器进程建立连接后,服务器就会获取到文本形式的请求,接下来要进行解析与优化,解析与优化的过程要经过很多的处理,其中查询缓存、语法解析、查询优化三部分比较重要,下面注重讲一下这三部分。

1. 查询缓存

mysql服务器会把处理过的查询请求和结果缓存起来,当下一次有同样的请求过来时,直接从缓存中查找结果即可,这个缓存在不同的客户端进程之间是共享的。

注意:1. 如果两个查询请求有任何字符上的不同(包括大小写)时,缓存不会被命中。2. 当查询请求中保存系统函数、用户自定义变量和函数、系统表时,该请求不会被缓存。3. 当表结构或数据进行更改时,与该表相关的所有查询缓存变为无效并从查询缓存中删除。

2. 语法解析

如果查询缓存没有命中,mysql服务器便会对客户端发送过来的文本进行分析,判断请求的语法是否正确,然后从文本中提取要查询的表,要查询的条件放到服务器内部使用的一些数据结构上。

3. 查询优化

语法解析后,mysql的优化程序会对我们的语句进行一些优化,例如外连接转换为内连接、表达式简化等,优化的结果就是生成一个执行计划,我们可以用EXPLAIN语句来查看某个语句的执行计划。

三、存储引擎

mysql服务器把数据的存储的提取操作封装到存储引擎的模块中,等到mysql服务器查询优化结束后,按照生成的执行计划调用底层的存储引擎提供的接口获取数据返回到客户端就完成了一次查询请求。mysql提供了不同的存储引擎,不同的存储引擎管理的表可能存在不同的存储结构,存取算法也有可能不同。mysql5.5.5版本开始默认存储引擎是InnoDB,之前的默认存储引擎是MyISAM。

mysql支持的存储引擎

存储引擎描述
ARCHIVE用于数据存档(记录插入后不可再修改)
BLACKHOLE丢弃写操作,读操作会返回空内容
CSV在存储数据时,以逗号分割各个数据项
FEDERATED用来访问远程表
InnoDB支持事务、行级锁、外键
MEMORY数据只存储在内存,不存储在磁盘,多用于临时表
MERGE用来管理多个MyISAM表构成的集合
MyISAM主要的非事务处理存储引擎
NDBmysql集群专用存储引擎

到此mysql查询请求处理过程介绍完毕,创作不易,各位老板有钱的捧个人场,没钱的也捧个人场,谢谢各位老板!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩朝洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值