Mysql学习笔记(一):Mysql的架构

一、mysql的组成部分

下面是来自Mysql实战的图片,该图片很好的表示了mysql的组成

mysql架构图

我们主要是和server层打交道,该层由连接器,分析器,优化器执行器、(查询缓存)组成

二、连接器的作用

每个客户端的连接都会有一个线程(在mysql5.5之后,mysql支持线程池插件,使得少数线程可以服务大量的服务的连接)。

首先,再进行三次握手之后,建立了网络连接,然校验用户名,原始主机信息和密码。当然,在校验通过后,连接器回去权限表里面获取用户的权限。这里,这个权限将会在整个连接中被使用,即使后来修改了权限表,该权限也不会改变,只能重新建立连接来修改权限。

在建立完成连接后,若没有其余的操作,那么该连接会处于空闲状态。这里使用show processlist来查看,这里,那些sleep为空闲连接,若sleep长时间不使用,会断开连接,该时间可以通过修改wait_timeout来修改,默认为8小时。建立连接相对复杂,要尽量避免频繁的建立连接,但是大量的长连接,会十分占用内存。因为mysql临时使用的内存是存放在连接对象当中的。

怎么解决这个问题呢?你可以考虑以下两种方案。

定期断开长连接。使用一段时间,或者程序里面判断执行过一个占用内存的大查询后,断开连接,之后要查询再重连。

如果你用的是 MySQL 5.7 或更新版本,可以在每次执行一个比较大的操作后,通过执行 mysql_reset_connection 来重新初始化连接资源。这个过程不需要重连和重新做权限验证,但是会将连接恢复到刚刚创建完时的状态。

三、查询缓存

该模块并不是很实用,因为每次对表有修改操作,都会清空该表的缓存,因此,该功能只对那些基本不会修改的表(配置表等),查询远远大于修改的表有一定的作用。因此在mysql8.0之后将该功能直接删除了。

四、分析器

Mysql会解析查询,创建内部数据结构(解析树),对其进行优化,如,重写查询,决定表的读取顺序,选择合适的索引等。当然,这些优化是在保证查询不会改表查询结构前提下的,有点类似指令重排序。

优化器会受到存储引擎的影响,它会请求存储引擎提供其存储容量以及某个具体操作的开销,以及表数据的统计信息等。

五、执行器

进入执行阶段,先会验证用户对该表有没有执行权限(连接时候获取的权限)。

对于在执行阶段,条件是否有索引,先进行一个粗略的介绍。若条件不是索引,那么,会执行全表扫描。而索引的话,它会按照一定的规则排好序,那么,就可以直接定位到指定的行。
© 著作权归作者所有,转载或内容合作请联系作者

喜欢的朋友记得点赞、收藏、关注哦!!!

相关推荐
我登哥MVP2 分钟前
Spring Boot 从“会用”到“精通”:ReturnValueHandler原理
java·spring boot·后端·spring·java-ee·maven·intellij-idea
fly spider1 小时前
Spring 原理总览:从启动到请求执行
java·数据库·spring
霸道流氓气质2 小时前
Spring AI Alibaba Skills 完整实战:从零构建智能会议助手
java·人工智能·spring
小楊不秃头2 小时前
Spring:Bean的存储
java·spring·bean
百珏2 小时前
流量没暴涨,网关却挂了:Spring Cloud Gateway 从 500 QPS 优化到 4200 QPS
后端·spring cloud·架构
kakawzw3 小时前
微服务组件源码6——Spring Gateway
spring·gateway
2501_918126913 小时前
一个上帝类程序作画
前端·css·css3
程序员阿卢3 小时前
01-基于springboot框架调用ollama下的模型完成基本功能
spring boot·后端·ollama·通义千问模型qwen
辰海Coding3 小时前
MiniSpring框架学习笔记-JDBC 访问框架:如何抽取 JDBC 模板并隔离数据库?
java·数据库·笔记·学习·spring
烧饼Fighting3 小时前
Jenkins自动化编译部署Spring Boot项目
spring boot·自动化·jenkins