MySQL 全景图

前言

MySQL是啥?我一直以为MySQL是数据库,直到我最近看了很多关于MySQL的文章、专栏以及书籍后,我对MySQL的才有了更加深刻的体会。

原来MySQL并不是数据库,又或者说,我认为“MySQL是数据库这种想法”是片面的。其实MySQL是一个大的系统,并不只是数据库那么简单。反正我也说不清MySQL是什么,这个东西一两句话很难说的清,即使我用一两句话说得清,我相信你也不一定听得懂,这种东西只可意会不可言传。我刚刚不是说了MySQL是一个系统嘛,我脑子里的系统架构是这样的,你看看能不能看得懂:

我看了好多文章,他们都用了很多自己的方式去讲述MySQL的架构,比如讲解一条语句在MySQL的执行过程。其实这是一个很好的想法,但是事实上,他们也没讲明白这个问题,或者说讲不出我想要的那种效果。感觉这些文章要么讲的太粗略,要么没讲到本质。

所以我想写这么一篇文章,把一条语句在MySQL的执行过程这个问题给讲好,通过讲这么个问题,将我脑里的MySQL全景图描绘出来,顺便梳理一下我的近期所学和收获。

连接器

这相当于MySQL架构的入口了。客户端想要拿到MySQL系统中数据库的数据,就必须先经过这个连接器与MySQL系统建立连接。建立连接的过程采用了三次握手技术。

分析器

这个没啥好讲的。反正就是一条sql语句进来,分析器会通过词法分析算法和语法分析算法来判断这条sql语句想干嘛,然后把这条语句翻译给优化器听。

优化器

分析器已经将sql语句翻译给优化器听了。优化器会看看这条语句有没有索引,有的话就会分析一下到底选择走哪个索引(或者多表关联语句的话,决定执行的先后顺序)。把索引选出来之后,将索引交给执行器。

执行器

执行器的执行十分依赖存储引擎。执行器拿到索引时,会调用存储引擎接口,让存储引擎接口帮它做事。存储引擎有很多种,InnoDB、MyISAM、Memory。我们这里就将InnoDB这种。

InnoDB存储引擎会怎么做呢?它会通过优化器选择的索引(或者说优化器选择的索引B+树)来找到想要访问的数据的所在位置。这里特别注意,索引和目录很像,你看书是通过目录来找到你想看的文章的所在页,这里的索引就是目录,想要访问的数据就是想要看的文章,数据所在位置就是书的页码。事实上,我们都知道B+树中叶子节点会存放一些东西,我之前以为叶子节点存放的是数据,后来我发现我理解错了,叶子节点存放的是指针,指针指向数据。数据其实根本不存在于索引树中,而是存在于数据页中。

扯远了,回到刚才说的,当存储引擎找到你想找的数据的所在位置时,存储引擎会看看这个数据在不在buffer pool中,如果不在就先将这个数据所在的数据页以及这个数据页的相邻数据页都加载到buffer pool中,然后将这个数据交给执行器执行。执行器执行完这个数据后(比如更新这个数据),存储引擎就将这个更新后的数据放回到buffer pool中,然后通过两阶段提交,这条数据就更新完了。

而且,当涉及到对磁盘和buffer pool的读写时,会涉及到 MySQL中这个知识。

小结

这就是MySQL一条语句的执行过程。当然,我还没对这个过程做深入的分析,只是简单的讲了一下这个过程。加粗的地方就是应该深入分析的地方,我在后续也会写对应的文章进行讲解。

理解了这个过程,对于MySQL的基本架构也就差不多掌握了。当对MySQL有一个基本的认识的时候,之前对很多东西的困惑现在就明白了。而且MySQL的架构可以当做一条主线,通过MySQL这个架构,将MySQL的知识都串联起来,这样不知不觉就形成了自己的MySQL全景图了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/507188.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 集成分布式任务调度 XXL-JOB【保姆级上手】

文章目录 XXL-JOB 介绍分布式任务调度XXL-JOB 概述 快速入门下载源码初始化调度数据库编译源码调度中心调度中心介绍配置调度中心部署调度中心集群部署调度中心(可选)Docker 镜像方式搭建调度中心(可选) 执行器执行器介绍添加依赖…

Talend API Tester-api接口测试插件

这是Google的一个扩展,直接在右上角,扩展程序——管理扩展程序直接下载安装就可以了 web接口测试是非常方便的

若依框架学习使用

若依官网项目拉取下来介绍 | RuoYi 项目运行: 1.idea安装,可以运行前后端 编辑器idea、jdk环境安装、数据库mysql、navicat工具、redis(redis-server启动)安装 2.navicat数据库连接, 创建数据库ry-vue并导入数据脚本ry_2021xxxx.sql,qua…

国内ip怎么来回切换:操作指南与注意事项

在数字化时代,互联网已经成为我们日常生活、学习和工作中不可或缺的一部分。然而,随着网络应用的不断深化,用户对于网络环境的稳定性和安全性要求也越来越高。其中,IP地址作为网络中的关键标识,其切换与管理显得尤为重…

基于jsp+Spring boot+mybatis的图书管理系统设计和实现

基于jspSpring bootmybatis的图书管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获…

基于 google 的 libphonenumber 将手机号转成地区及供应商信息

依赖&#xff1a; <dependency><groupId>com.googlecode.libphonenumber</groupId><artifactId>libphonenumber</artifactId><version>8.13.26</version> </dependency> <dependency><groupId>com.googlecode.lib…

CVE-2022-29405 Apache Archiva任意用户密码重置漏洞分析

Apache Archiva是一套可扩展的Artifact Repository管理系统。它能够与Maven&#xff0c;Continuum和ANT等构建工具完美结合。Archiva提供的功能包括&#xff1a;远程Repository代理&#xff0c;基于角色的安全访问管理&#xff0c;Artifact分发、维护、查询&#xff0c;生成使用…

强烈推荐:2024 年12款 Visual Studio 亲测、好用、优秀的工具,AI插件等

工具类扩展 1. ILSpy 2022 &#xff08;免费&#xff09; ILSpy 是 ILSpy 开源反编译器的 Visual Studio 扩展。 是一款开源、免费的、且适用于.NET平台反编译【C#语言编写的程序和库(.dll)内容】工具&#xff1b;可以集成在Visual Studio 开发工具中&#xff0c;能够十分快捷…

探索父进程和子进程

文章目录 通过系统调用查看进程PID父进程、子进程 通过系统调用创建进程-fork初识为什么fork给父进程返回子进程的PID&#xff0c;给子进程返回0fork函数如何做到返回两个值一个变量为什么同时会有两个返回值&#xff1f;bash总结 通过系统调用查看进程PID getpid()函数可以获…

【面试题】RocketMQ如何处理消息重复的问题呢?

对分布式消息队列来说&#xff0c;同时做到确保一定投递和不重复投递是很难的&#xff0c;就是所谓的“有且仅有一次” 。RocketMQ择了确保一定投递&#xff0c;保证消息不丢失&#xff0c;但有可能造成消息重复。 处理消息重复问题&#xff0c;主要有业务端自己保证&#xff…

【Docker】搭建强大易用的个人博客 - Halo

【Docker】搭建强大易用的个人博客 - Halo 前言 本教程基于绿联的NAS设备DX4600 Pro的docker功能进行搭建&#xff0c;采用Halo MySQL实例作为演示。 简介 Halo [ˈheɪloʊ] 是一个简洁&#xff0c;现代&#xff0c;快速且非常灵活的建站工具&#xff0c;它是由一位中国开…

Web漏洞-深入WAF注入绕过

目录 简要其他测试绕过 方式一:白名单&#xff08;实战中意义不大&#xff09; 方式二:静态资源 方式三: url白名单 方式四:爬虫白名单 #阿里云盾防SQL注入简要分析 #安全狗云盾SQL注入插件脚本编写 在攻防实战中&#xff0c;往往需要掌握一些特性&#xff0c;比如服务…

AI人像超分解决方案解析

在数字化高速发展的今天&#xff0c;企业对于视觉内容的需求日益增长&#xff0c;特别是在人像处理方面&#xff0c;高清、细腻的画面质量已成为行业标配。美摄科技&#xff0c;作为业界领先的AI视觉技术提供商&#xff0c;凭借其强大的研发实力和深厚的行业经验&#xff0c;推…

九州金榜|孩子沉迷手机网络是什么原因?应该怎么办?

随着现在社会的发展进步&#xff0c;手机已经是每个家庭必不可少的物品&#xff0c;现在基本每个人都是人手一部手机&#xff0c;有些人会配置多部手机&#xff0c;很多家长在忙碌一天后&#xff0c;回到家中也是手机不离手&#xff0c;经常坐下就开始玩手机&#xff0c;这种行…

JAVA学习笔记21(访问修饰符)

1.访问修饰符 ​ *基本介绍 ​ java提供四种访问控制修饰符号&#xff0c;用于控制方法和属性(成员变量)的访问权限(范围) 1.公开级别&#xff1a;用public修饰&#xff0c;对外公开 2.受保护级别&#xff1a;用protected修饰&#xff0c;对子类和同一个包中的类公开 3.默…

2024.4.1每日一题

LeetCode 故障键盘 题目链接&#xff1a;2810. 故障键盘 - 力扣&#xff08;LeetCode&#xff09; 题目描述 你的笔记本键盘存在故障&#xff0c;每当你在上面输入字符 i 时&#xff0c;它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个下标从 0 开始的字…

4个文案写作神器,高效一键生成原创文案!

4个文案写作神器&#xff0c;高效一键生成原创文案&#xff01;在当今数字化时代&#xff0c;内容创作已成为企业营销的关键环节之一。然而&#xff0c;许多营销人员面临着文案创作的挑战&#xff0c;他们需要快速、高效地生成原创文案来吸引受众。幸运的是&#xff0c;现在有四…

刷题之动态规划-路径问题

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的题目了&#xff0c;要特别注意初始化的时候给什么值。 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么->dp[i]表示什么状态转移方程&#xff1a; dp[i] 等于什么1 和 2 是…

鹰眼降尘系统的维护成本高吗(已解答)

一、鹰眼降尘系统的维护成本高吗? 鹰眼降尘系统的维护成本会受到多种因素的影响&#xff0c;包括系统的规模、使用频率、设备质量、维护计划等。一般来说&#xff0c;合理的维护可以降低成本并延长系统的使用寿命。 以下是一些影响鹰眼降尘系统维护成本的因素&#xff1a; 设…

Codigger开发者篇:开启全新的开发体验(三)

Codigger&#xff0c;作为一个集开发、运营与使用私人应用于一体的分布式操作系统&#xff0c;以其独特的魅力与优势&#xff0c;为开发者们打开了全新的世界大门&#xff0c;引领他们迈向了一个前所未有的开发体验之旅。在之前的篇章中&#xff0c;我们已经深入探讨了Codigger…