前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Mysql框架——Mysql系列(一)

Mysql框架——Mysql系列(一)

原创
作者头像
翰墨飘香
修改于 2025-02-08 00:13:18
修改于 2025-02-08 00:13:18
6020
举报
文章被收录于专栏:Mysql实战Mysql实战翰墨飘香

一、mysql框架

mysql主要分为Server层存储引擎层两部分

1.客户端

各种语言都提供了连接mysql数据库的方法,比如jdbc、php、go等,可根据选择 的后端开发语言选择相应的方法或框架连接mysql

2.server层

包括连接器、查询缓存、分析器、优化器、执行器等,涵盖mysql的大多数核心服务功能,以及所有的内置函数(例如日期、世家、数 学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。

3.存储引擎层

负责数据的存储和提取,是真正与底层物理文件打交道的组件。 数据本质是存储在磁盘上的,通过特定的存储引擎对数据进行有组织的存放并根据业务需要对数据进行提取。存储引擎的架构模式是插件式的,支持Innodb,MyIASM、Memory等多个存储引擎。现在最常用的存储引擎是Innodb,它从mysql5.5.5版本开始成为了默认存储引擎。

4.物理文件层

存储数据库真正的表数据、日志等。物理文件包括:redolog、undolog、binlog、errorlog、querylog、slowlog、data、index等

二、Server层重要主件介绍

1、连接器

  • 连接器负责来自客户端的连接、获取用户权限、维持和管理连接。
  • 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建连接才会使用新的权限设置
  • 客户端如果太长时间没动静,连接器就会自动将它断开。这个时间是由参数 wait_timeout 控制的,默认值是8小时。如果在连接被断开之后,客户端再次发送请求的话,就会收到一个错误提醒: Lost connection to MySQL server during query。

2、查询缓存

MySQL 8.0 版本直接将查询缓存的整块功能删掉了。

(查看版本 show variables like '%version%' )(2023MT-5.7)

mysql拿到一个查询请求后,会先到查询缓存查看之前是否执行过这条语句。前执行过的语句及其结果可能会以key-value对的形式,被直接缓存在内存中。key是查询的语句,value是查询的结果。如果当前sql查询能够直接在查询缓存中找到key,那么这个value就会被直接返回给客户端。

其实大多数情况下建议不要使用查询缓存,为什么呢?因为查询缓存往往弊大于利。查询缓存非常容易失效,只要对一个表进行更新,与这个表相关的所有查询缓存都会被清空。因此很可能费劲把结果存起来后,还没使用就被一个更新操作全清空了。对于更新操作多的数据库来说,查询缓存的命中率会非常低。除非业务需要的是一张静态表,很长时间才会更新一次。比如,一个系统配置表,那么这张表的查询才适合使用查询缓存。

好在mysql提供了这种“按需使用”的方式,可以将参数query_cache_type设置成DEMAND,这样对于默认的sql语句都不使用查询缓存,而对于确定要使用查询缓存的语句,可以用SQL_CACHE显示指定,像下面这个语句一样:

3、分析器

词法分析(识别关键字,操作,表名,列名)

语法分析 (判断是否符合语法)

4、优化器

优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。优化器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段。

5、执行器

开始执行的时候,要先判断一下用户对这个表 T 有没有执行查询的权限。如果没有,就会返回没有权限的错误。如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。查询也会在优化器之前调用 precheck 验证权限。如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去调用这个引擎提供的接口。在数据库的慢查询日志中看到一个rows_examined 的字段,表示这个语句执行过程中扫描了多少行,这个值就是在执行器每次调用引擎获取数据航的时候累加的。在有些场景下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟rows_examined并不是完全相同的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL基础架构之查询语句执行流程
而我们的连接器就是处理这个过程的,连接器的主要功能是负责跟客户端建立连接、获取权限、维持和管理连接,连接器在使用的过程中如果该用户的权限改变,是不会马上生效的,因为用户权限是在连接的时候读取的,只能重新连接才可以更新权限
星哥玩云
2022/08/17
1.2K0
MySQL基础架构之查询语句执行流程
MySQL(一)基本架构
连接到数据库,负责跟客户端建立连接、获取权限、维持和管理连接,命令通常是mysql -h$ip -P$port -u$user -p.
JNJYan
2019/03/04
8470
MySQL(一)基本架构
02 | 基础框架:一条sql查询语句是如何执行的_45
大体来说,MySQL 可以分为 Server 层和存储引擎层两部分,不同的存储引擎共用一个 Server 层。
名字是乱打的
2021/12/24
1.3K0
02 | 基础框架:一条sql查询语句是如何执行的_45
【MySQL 系列】MySQL 架构篇
Server 层:负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现,主要包括连接池,执行器、优化器、解析器、预处理器、查询缓存等。另外,所有的内置函数(如日期、时间、数学和加密函数等)和所有跨存储引擎的功能(如存储过程、触发器、视图等)都在 Server 层实现;
栗筝i
2024/03/19
2.2K0
【MySQL 系列】MySQL 架构篇
一条sql查询语句是如何执行的
作为一名常年CURD的程序员,一定非常熟悉这条查询语句吧。从jiuxiao_admin_log 表中查询 user_id=1000的数据。 然而我们只知道这样会返回出结果,却不知道里面的流程。相信这也是你点击进来的目的吧,让我们一起来拆解一下mysql中有哪些零件!
九霄道长
2021/03/05
1.1K0
一条sql查询语句是如何执行的
笔记 | 一条SQL查询语句是如何执行的?
Server 层包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等
如梦初醒_-
2022/10/19
1.1K0
笔记 | 一条SQL查询语句是如何执行的?
MySQL架构(一)SQL 查询语句是如何执行的?
在了解 MySQL 架构之前,我们先看几个 SQL 语句,当我们知道了 SQL 语句的执行流程,再学习 MySQL 架构简直手到擒来。
鳄鱼儿
2024/05/21
1890
深入理解Mysql-基础架构
MySQL是最受欢迎的开源SQL数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。
用户2146693
2021/11/15
6630
深入理解Mysql-基础架构
MySQL 基本架构概览
下图是 MySQL 的一个简要架构图,从下图可以清晰的看到 SQL 语句在 MySQL 内部是如何执行的。
happyJared
2019/08/18
8080
MySql 入门到精通-sql查询语句的执行过程,你真的知道吗?
首先,我们先来看看MySQL的基础架构,我们再平时写的最多的也就是 sql 查询语句,那么,对于一条简单的查询语句,你可否有想过它是如何执行的,期间又经历了哪些步骤呢?如下sql 查询:
架构师修炼
2020/07/19
1.1K0
MySql 入门到精通-sql查询语句的执行过程,你真的知道吗?
一条 SQL 查询语句是如何执行的?
我们只看到一个输入语句,返回一个结果,却不知道这个 SQL 语句在 MySQL 内部的执行过程。
王小明_HIT
2020/05/25
8390
MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的
执行如下SQL,我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。
共饮一杯无
2022/11/28
1.2K0
MySQL实战 | MySQL逻辑架构—一条查询SQL是如何执行的
MySQL Select语句是怎么执行的?
最近在极客时间看丁奇大佬的《MySQL45讲》,真心觉得讲的不错,把其中获得的一些MySQL方向的经验整理整理分享给大家,有兴趣同学可以购买相关课程进行学习。
AsiaYe
2020/05/07
2.4K0
2018-11-23 当我们输入一条 SQL 查询语句时,发生了什么?
我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:
Albert陈凯
2018/12/17
7990
2018-11-23 当我们输入一条 SQL 查询语句时,发生了什么?
MySQL实战 -- 一条SQL查询语句是如何执行的?
来跟你聊聊 MySQL 的基础架构。我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题。同样,对于 MySQL 的学习也是这样。平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:
MachineLP
2019/05/26
1.6K0
MySQL:概述
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
栗筝i
2022/12/01
5450
MySQL:概述
一条SQL查询语句是如何执行的?
首先有一个 user_info 表,表里有一个 id 字段,执行下面这条查询语句:
武培轩
2019/10/06
1.8K0
一条sql查询语句执行过程解析
server层:(所有跨存储引擎的操作均在这一层完成,包含下面mysql核心功能及内置函数均在这一层完成)
ITer.996
2022/11/22
6420
一条sql查询语句执行过程解析
mysql学习笔记(一)sql语句执行
我们可以看到mysql分为Server层和存储引擎两部分。Server层包含了连接器、缓存、分析器、优化器、执行器,并且所有的存储过程、触发器等存储功能都在这一层实现。
虞大大
2020/11/12
2.1K0
mysql学习笔记(一)sql语句执行
MySQL中一条更新的SQL如何执行
MySQL 之 -- 一条更新的 SQL 如何执行,一条更新的 SQL 语句如何执行执行流程一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示:MySQL 数据库主要分为两个层级:服务层和存储引擎层服务层:server 层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数 MySQL 中的核心功能所有跨存储引擎的功能也在这一层实现,包括存储过程、触发器、视图等。 执行流程 一条 SQL 的执行流程如图所示:(图片来源于网络) 如图所示: MySQL 数据库主要分为两个层级:服务层和存
码农编程进阶笔记
2021/11/01
1.3K0
MySQL中一条更新的SQL如何执行
相关推荐
MySQL基础架构之查询语句执行流程
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档