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

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

五、执行器

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

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

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

相关推荐
流烟默9 小时前
SSE 实战:在 SpringBoot + Vue 项目中零依赖实现轻量级实时消息推送
vue.js·spring boot·后端·sse
七夜zippoe10 小时前
Spring AI 是什么?Java 工程师的 AI 开发第一站
java·人工智能·spring·ai·开发
ly768910 小时前
Spring Boot 集成 PostgreSQL 的连接池调优:HikariCP、prepared statement 与服务器资源边界
spring boot·postgresql·hikaricp·连接池调优
wangjialelele11 小时前
一文梳理 Spring Cloud 核心组件:Eureka、Nacos、OpenFeign、LoadBalancer 与 Gateway
java·spring boot·spring·spring cloud·微服务·nacos
萧瑟余晖11 小时前
Spring Security综合实战与安全加固详解
java·安全·spring
CarIise12 小时前
Spring MVC 请求参数绑定与常用注解2
java·spring·mvc
七夜zippoe12 小时前
Spring Boot 接通义千问:从拿 Key 到第一个对话接口跑通(保姆级)
java·spring boot·后端
Nebula_g12 小时前
SpringBoot企业级实战项目—云禾外卖—SpringBoot常用注解解析
java·网络·数据库·spring boot·后端·spring·javase
企业数字化笔记12 小时前
租户停用后数据和任务怎么处理?冻结、恢复与保留策略的实现
android·java·spring boot
CarIise12 小时前
Spring MVC 请求参数绑定与常用注解
java·spring·mvc