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

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

五、执行器

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

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

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

相关推荐
风象南1 分钟前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗27 分钟前
springboot中使用线程池
java·spring boot·后端
hello早上好40 分钟前
JDK 代理原理
java·spring boot·spring
PanZonghui1 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农1 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6661 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
何苏三月2 小时前
SpringCloud系列 - Sentinel 服务保护(四)
spring·spring cloud·sentinel
纳兰青华2 小时前
bean注入的过程中,Property of ‘java.util.ArrayList‘ type cannot be injected by ‘List‘
java·开发语言·spring·list
魔芋红茶2 小时前
spring-initializer
python·学习·spring
一头生产的驴3 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf