实现效果

客户端进程向服务端进程发送一段文本(sql语句),服务端进程处理后再向客户端返回一段文本(处理结果)。

如何确定服务器mysql端口开放 mysql的服务端口_如何确定服务器mysql端口开放

连接管理

我们讲的服务器就是一个mysql服务器进程,一个进程占用一个端口号(mysql默认端口为3306),服务器会在3306端口监听客户端的连接。当客户端通过

mysql -h 127.0.0.1 -u root -p

进行连接服务器的时候,如果认证通过,服务器就会为客户端分配一个线程,处理该客户端的请求。当客户端断开连接的时候,服务器不会将连接的线程直接销毁,而是将它缓存起来,在下一个客户端连接时分配给新的客户端,避免了频繁创建和销毁线程的效果。

解析与优化
查询缓存

在客户端与服务器建立连接之后,不会立即去查询数据结果,首先会查询sql缓存。这个缓存会有比较多的问题:
1、当两条sql 相差一个空格,注释,大小写时,缓存就不会命中了
2、当sql中存在库函数(如函数NOW,每次调用获取最新的时间),mysql就不会对这条sql进行缓存。
3、缓存管理中会维护单独的线程,当缓存的sql中的表进行了update、insert、delete等更新操作后,会将相应的sql缓存进行清除。

小贴士:mysql的缓存管理的使用比较苛刻,在真实场景中对性能的提升比较有限,在mysql 8.0之后,已经丢弃了缓存

语法解析

这一块就涉及到词法分析、语法分析、语义分析这块,针对客户端提交的sql文本,拆解出需要操作哪个表,什么操作,对哪些数据进行操作等。

查询优化

查询优化就是生成执行计划的过程,我们可以通过explain sql语句,如(explain select * from tableName;)查询sql的执行计划,看sql的执行走了什么索引,子查询会不会优化成连接查询等。

存储引擎

我们可以通过show engines;查看数据库支持的存储引擎:

如何确定服务器mysql端口开放 mysql的服务端口_mysql_02


存储引擎主要与物理层打交道,主要负责如果提取数据,插入数据的策略,为上层提供了几十个底层函数,像"读取索引第一条内容"、“读取索 引下一条内容”、"插入记录"等等。为mysql的执行计划调用。

虽然mysql支持的存储引擎很多,但我们常用的主要为Innodb与MyIsam两种。

小结:

我们大致了解mysql处理客户端请求的主要流程,先心里有个底。