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

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

五、执行器

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

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

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

相关推荐
猫头虎34 分钟前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
MZ_ZXD0013 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
invicinble3 小时前
springboot的核心实现机制原理
java·spring boot·后端
space62123273 小时前
在SpringBoot项目中集成MongoDB
spring boot·后端·mongodb
金牌归来发现妻女流落街头5 小时前
【从SpringBoot到SpringCloud】
java·spring boot·spring cloud
张3蜂5 小时前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
皮卡丘不断更5 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
lucky67076 小时前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
Coder_Boy_6 小时前
基于Spring AI的分布式在线考试系统-事件处理架构实现方案
人工智能·spring boot·分布式·spring
7哥♡ۣۖᝰꫛꫀꪝۣℋ6 小时前
Spring-cloud\Eureka
java·spring·微服务·eureka