iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL架构设计思想详解
  • 463
分享到

MySQL架构设计思想详解

MySQL架构设计架构设计 2022-11-13 14:11:19 463人浏览 八月长安
摘要

目录前言1. Mysql整体架构2. 连接器3. 查询缓存4. 分析器5. 优化器6. 执行器7. 总结前言 很多开发同学对sql优化如数家珍,却对mysql架构一知半解。岂不是只见

前言

很多开发同学对sql优化如数家珍,却对mysql架构一知半解。岂不是只见树叶,不见森林,终将陷入细节中不能自拔。

今天就一块学习MySQL分层架构,深入了解MySQL底层实现原理,以及每层的作用,我们常见的SQL优化到底在哪一层做了优化?

1. MySQL整体架构

由图中可以看到MySQL架构主要分为Server层存储引擎层

Server层又分为连接器、缓存、分析器、优化器、执行器。所有跨存储引擎的功能都在这层实现,比如:函数、存储过程、触发器、视图等。

存储引擎是可插拔式的,常见的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认的是MyISAM,之后默认的是InnoDB。

g

2. 连接器

连接器主要用来管理客户端的连接和用户身份认证。

客户端与Server端的连接采用的是tcp协议,经过TCP握手,建立连接之后,连接器开始进行身份验证。

> mysql -hlocalhost -P3306 -uroot -p

如果认证失败,就会出现错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

可以通过 show processlist 命令查看系统所有连接的信息:

其中Commond列表示连接状态,Daemon表示后台进程,Query表示查询,Sleep表示空闲连接。

3. 查询缓存

客户端请求不会直接去存储引擎查询数据,而是先在缓存中查询结果是否存在。如果结果已存在,直接返回,否则再执行一遍查询流程,查询结束后把结果再缓存起来。

如果数据表发生更改,将清空失效缓存,例如 insert、update、delete、alter操作等。

对于频繁变更的数据表来说,缓存命中率很低。使用缓存反而降低了读写性能,所以在MySQL8.0以后就移除了缓存模块。

可以通过下面命令查看是否开启了缓存:

4. 分析器

分析器主要对SQL语句进行词法分析语法分析

首先进行词法分析,分析出MySQL的关键字、以及每个词语代表的含义。然后进行语法分析,检测SQL语句是否符合MySQL语法要求。

MySQL通过识别字符串中列名、表名、where、select/update/insert 等MySQL关键字,在根据语法规则判断sql是否满足语法,最终会生成一个抽象语法树(AST)。

比如:SQL语句中少写个where关键字,就会提示错误。

mysql> select * from user id=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL Server version for the right syntax to use near '=1' at line 1

5. 优化器

在真正执行SQL语句之前,还需要经过优化器处理。

我们熟知的执行计划(Explain)就是优化器生成的。

优化器主要有两个作用:逻辑优化物理优化

逻辑优化主要进行等价谓词重写、条件化简、子查询消除、连接消除、语义优化、分组合并、选择下推、索引优化查询、表查询替换视图查询、UNIOn替换or操作等。

物理优化主要作用是通过贪婪算法,根据代价估算模型,估算出每种执行方式的代价。并使用索引优化表连接,最终生成查询执行计划。

附上MySQL优化器架构图,可以清晰的看到优化过程:

如果想知道优化器估算结果信息,可以通过Explain查看,关注一灯架构,下篇文章会详细讲解Explain具体用法。

6. 执行器

在优化器优化完SQL,并生成了执行计划后,就会把执行计划传递给执行器。

执行器调用存储引擎接口,真正的执行SQL查询。获取到存储引擎返回的查询结果,并把结果返回给客户端,至此SQL语句执行结束。

7. 总结

本篇文章主要带大家了解了MySQL分层架构,以及每层的架构的作用。可以看出MySQL每层架构分工明确、逻辑清晰,深刻地体现了架构设计中“高内聚,低耦合”的设计思想。我们平时在做架构设计的时候,也要多学习一下这种分层架构的设计思想。

到此这篇关于MySQL架构设计思想详解的文章就介绍到这了,更多相关MySQL架构设计内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL架构设计思想详解

本文链接: https://www.lsjlt.com/news/171847.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL架构设计思想详解
    目录前言1. MySQL整体架构2. 连接器3. 查询缓存4. 分析器5. 优化器6. 执行器7. 总结前言 很多开发同学对SQL优化如数家珍,却对MySQL架构一知半解。岂不是只见...
    99+
    2022-11-13
    MySQL架构设计 架构设计
  • MySQL通透详解架构设计
    系统只要能从数据库连接池获取到一个数据库连接,就能执行CRUD。可通过数据库连接将待执行SQL发给MySQL。 大部分 crud boy只知道: 执行insert语句后,在...
    99+
    2024-04-02
  • Dubbo架构整体设计详解
    目录一、Dubbo调用关系说明1.1 组成部分1.2 启动和执行流程说明二、整体调用链路三、Dubbo整体设计一、Dubbo调用关系说明 1.1 组成部分 在这里主要由四部分组成:...
    99+
    2023-05-15
    Java Dubbo架构整体设计 Dubbo架构整体设计 Java Dubbo
  • Node.js后端框架设计构想是怎样的
    Node.js后端框架设计构想是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。后端的核心文件mass.js包含批量创建与...
    99+
    2024-04-02
  • ​​​​​​​Android H5通用容器架构设计详解
    目录背景术语对齐探索如何优雅地提供接口调用?怎样封装多个不同类型的H5容器容器?整体架构通用容器框架容器基础组件这样的架构能带来什么样的好处?背景 大家如果经历过Hybrid项目的开...
    99+
    2024-04-02
  • PHP MVC 架构的本质:理解框架背后的思想
    MVC(模型-视图-控制器)架构是一种被广泛应用于 Web 开发中的软件架构范式,它将应用程序逻辑清晰地分离为三个独立的组件:模型、视图和控制器。这种分离使得应用程序的可维护性、可测试性和可扩展性得到极大提升。 模型 模型负责管理应用程...
    99+
    2024-03-02
    MVC、PHP、框架设计、软件架构
  • 解析Tomcat架构原理到架构设计
    目录一、学习目的1.1、掌握 Tomcat 架构设计与原理提高内功1.2、宏观理解一个请求如何与 Spring 联系起来1.3、提升自己的系统设计能力二、整体架构设计2.1、连接器2...
    99+
    2024-04-02
  • 如何站在开发者的角度理解框架的设计思想?
    感谢支持 我已经在CSDN发布了100多篇原创文章,如果你读过我的文章,欢迎点击下方的链接,帮我五星评价一下,谢谢。 很简单,点击下图,像截图一样五星评价一下就可以了: 有问必答 最近有好多读者...
    99+
    2023-10-11
    java 前端 数据库 golang 后端
  • 不要中了ERP设计思想的毒(不是管理思想)
    背景:大型制造装备, 需要分批发货, 客户现场安装(安装过程持续大于15天)问题描述:用户反馈了一个问题,基本逻辑是,如果在智能制系统勾选【是否更新发货】信息,如果勾选了, 系统会自动更新CRM系统, 现场安装服务团队自动接收到相应信息。对...
    99+
    2023-06-05
  • Go微服务开发框架DMicro设计思路详解
    目录背景概述架构设计理念面向接口设计会话 Session消息 Message协议 Proto编码 Codec连接 Socket有机的组合插件 Plugin组件未来展望背景 ...
    99+
    2024-04-02
  • 架构与思维论设计容量的重要性
    目录背景概念分析过程理解一些原理峰值QPS计算:系统容量评估时机评估的步骤 1、分析日总访问量2、评估平均访问量QPS3、评估高峰区间的QPS3.1 业务流量监控的曲线3....
    99+
    2024-04-02
  • Java Mybatis架构设计深入了解
    目录架构设计Mybatis主要构件Mybatis缓存总结:架构设计 我们可以把Mybatis的功能架构分为三层: 1.API接口层:提供给外部使用的接口API,开发人员通过这些本地...
    99+
    2024-04-02
  • 如何理解kubernetes scheduler架构设计
    这期内容当中小编将会给大家带来有关如何理解kubernetes scheduler架构设计,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。资源调度基础scheudler是kubernetes中的核心组件,负...
    99+
    2023-06-19
  • 【python技能树】python程序设计思想
    0 Python编程思想 Python是一种面向对象oop(Object Oriented Programming)的脚本语言。 面向对象是采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。 在面向对象程序设计中...
    99+
    2023-09-02
    python 自顶向下 自底向上 程序设计思想 python技能树
  • HDFS架构如何设计
    这篇文章主要介绍HDFS架构如何设计,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HDFS架构设计:1.NN(NameNode):主要是维护管理文件命名空间,其中包括了文件名称,文件的权限,创建时间,副本数,文件被分...
    99+
    2023-06-03
  • MySQL之高可用架构详解
    目录引言MySQL高可用一主一备:MySQL主从同步的几种模式:总结引言 “高可用”是互联网一个永恒的话题,先避开MySQL不谈,为了保证各种服务的高可用有几种常用的解决方案。 服务...
    99+
    2024-04-02
  • Java架构设计之六步拆解DDD
    目录引言项目需求信息DDD落地实践战略设计1、业务分析(1)事前准备(2)邀请参会的人(3)业务讨论2、领域建模(1)领域对象分析(2)构建业务聚合3、划分边界上下文战术设计1、微服...
    99+
    2024-04-02
  • JavaScript框架设计模式详解
    目录mvcmvpmvvmvue的来源spa mpacreateElementclass总结mvc Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可...
    99+
    2024-04-02
  • java分治思想之ForkJoin详解
    目录前言分治思想算法归并排序快速排序Fork/JoinForkJoinPool构造器工作窃取法使用前言   当我们面对需要同时执行多个任务的情况时,往往需要耗费大...
    99+
    2023-05-18
    java分治思想ForkJoin java ForkJoin
  • MySQL数据库有哪些常用架构设计
    本篇文章给大家分享的是有关MySQL数据库有哪些常用架构设计,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、MySQL引擎MySQL提供了两...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作