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

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

五、执行器

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

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

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

相关推荐
Tirzano2 小时前
springsecurity自定义认证
spring boot·spring
bing_1585 小时前
简单工厂模式 (Simple Factory Pattern) 在Spring Boot 中的应用
spring boot·后端·简单工厂模式
逸狼6 小时前
【JavaEE进阶】Spring MVC(3)
spring·java-ee·mvc
天上掉下来个程小白6 小时前
案例-14.文件上传-简介
数据库·spring boot·后端·mybatis·状态模式
程序员侠客行7 小时前
Spring事务原理 二
java·后端·spring
小天努力学java8 小时前
AI赋能传统系统:Spring AI Alibaba如何用大模型重构机票预订系统?
人工智能·spring
五月茶8 小时前
Spring MVC
java·spring·mvc
sjsjsbbsbsn8 小时前
Spring Boot定时任务原理
java·spring boot·后端
2501_903238659 小时前
Spring MVC配置与自定义的深度解析
java·spring·mvc·个人开发
计算机毕设指导69 小时前
基于Springboot学生宿舍水电信息管理系统【附源码】
java·spring boot·后端·mysql·spring·tomcat·maven