MySQL架构设计实例分析

1. MySQL整体架构

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

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

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

MySQL架构设计实例分析

2. 连接器

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

TCP协议被用于客户端和服务器端的连接,连接通过进行TCP握手建立,并在此基础上,连接器开始进行身份验证。

> mysql -hlocalhost -P3306 -uroot -p

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

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

MySQL架构设计实例分析

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

3. 查询缓存

客户端请求的查询不会直接访问存储引擎,而是先检查缓存中是否存在结果。如果结果已经被缓存,直接返回;否则,重新执行查询过程,查询结束后再将结果缓存。

失效缓存将在数据表发生更改时清空,如执行insert、update、delete、alter操作。

对于频繁变更的数据表来说,缓存命中率很低。由于使用缓存会降低读写性能,因此在 MySQL 8.0 之后的版本中,缓存模块被移除。

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

MySQL架构设计实例分析

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优化器架构图,可以清晰的看到优化过程:

MySQL架构设计实例分析

6. 执行器

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

执行器调用存储引擎接口,真正的执行SQL查询。SQL语句的执行在获取存储引擎返回的查询结果,然后将其返回给客户端后结束。

以上就是MySQL架构设计实例分析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/159917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月5日 13:27:33
下一篇 2025年12月1日 22:49:14

相关推荐

  • MySQL如何显示字符长度

    字符长度 命令:select char_length(‘andyqan’)。 作用: 显示指定字符长度。 应用场景: 查看字符长度时。 例子: mysql> select char_length(‘andyqian’);+————————…

    数据库 2025年12月5日
    000
  • 修复PHPCMSSQL注入漏洞的详细步骤

    修复php cms中的sql注入漏洞,核心在于使用预处理语句或参数化查询以彻底分离用户输入与sql逻辑,并结合输入验证、最小权限原则和错误信息控制。1. 使用预处理语句(如pdo或mysqli)确保数据与指令分离;2. 对所有输入进行严格验证和过滤,确保符合预期格式;3. 应用最小权限原则,限制数据…

    2025年12月5日 后端开发
    000
  • mysql使用的基础规范实例分析

    1、InoDB必须用于表存储引擎。 2、表格字符集默认使用utf8,必要时使用utf8mb4。 3、禁止使用存储过程、视图、触发器和event。 4、禁止在数据库中存储大文件。 如照片,可以将大文件存储在对象存储系统和数据库中。 禁止在线环境进行数据库压力测试。 测试、开发、在线数据库环境必须隔离。…

    数据库 2025年12月5日
    000
  • MySQL中的连接查询实例分析

    1. 笛卡尔乘积 表1有m行数据,表2有n行数据,查询结果有m*n行数据。 2. 分类 (1)按年代分类 sql92标准:仅支持内连接 sql99标准(推荐):支持内连接、外连接(左外连接和右外连接)、交叉连接 (2)按功能分类 内连接:等值连接、非等值连接、自连接 外连接:左外连接、右外连接、全外…

    数据库 2025年12月5日
    000
  • 如何使用PHPMyAdmin对用户权限进行审计和监控

    要使用phpmyadmin进行用户权限审计和监控,核心步骤如下:首先登录phpmyadmin,点击“用户账户”标签查看用户列表;其次点击用户“编辑权限”查看全局和数据库特定权限;最后通过sql命令行运行show grants或查询mysql.user、mysql.db表进行深度审计。查看特定用户的详…

    2025年12月5日 后端开发
    000
  • eclipse如何连接mysql

    1、打开eclipse,依次点击Window-preferences-java-Build Path-User Libraries 2、点击new按钮 3、在输入框中输入jdbc,选中下面的System library,点击ok 4、回到上一级界面,点击Add External JARs,打开到jd…

    2025年12月5日
    100
  • 如何优化PHPMyAdmin操作数据库的查询性能

    优化phpmyadmin查询性能的核心在于优化底层数据库和sql语句,而非phpmyadmin本身。1. sql语句精细化:避免select *,仅选取必要字段;确保join条件使用索引,避免在where子句的索引列上使用函数;合理使用like和union all。2. 索引合理构建:在频繁查询的w…

    2025年12月5日 后端开发
    000
  • 如何在Laravel中配置会话管理

    在%ignore_a_1%中配置会话管理,1. 修改config/session.php文件;2. 根据需求调整.env环境变量;3. 选择合适的会话驱动如file、database、redis;4. 设置生命周期和安全性选项。核心在于通过config/session.php定义会话行为,包括驱动、…

    2025年12月5日
    000
  • mysql中limit查询方法怎么使用

    背景 最近项目联调的时候发现了分页查询的一个bug,分页查询总有数据查不出来或者重复查出。 数据库一共14条记录。 如果按照一页10条。那么第一页和第二页的查询SQL和和结果如下。 那么问题来了,查询第一页和第二页的时候都出现了11,12,13的记录,而且都没出现 4 的记录。总有数据查不到这是为啥…

    2025年12月5日 数据库
    000
  • 数据库增删改查如何操作?PHP+MySQL完整CRUD示例

    php和mysql实现crud操作的步骤如下:1.添加数据使用insert into语句结合pdo预处理防止注入;2.查询数据用select语句配合query()和fetchall()获取结果;3.更新数据通过update语句并指定where条件避免全表更新;4.删除数据用delete语句同样需加w…

    2025年12月5日 后端开发
    000
  • MySQL数据库和Redis缓存一致性的更新策略是什么

    一、更新策略 1、如果redis中有数据,需要和数据库中的值相同。 2、如果Redis中无数据,数据库中的最新值要对Redis进行同步更新。 二、读写缓存 1、同步直写策略 写入数据库也同步写Redis缓存,缓存和数据库中的数据一致;对于读写缓存来说,要保证缓存和数据库中的数据一致,就要保证同步直写…

    2025年12月5日
    000
  • 在PHPMyAdmin中创建MySQL用户的详细步骤

    创建mysql用户的步骤是:登录phpmyadmin,进入“用户账户”,添加新用户并填写用户名、主机和密码,选择数据库权限后执行。原因包括安全、管理和隔离风险。主机字段中,localhost最安全,%最危险,特定ip适合远程连接。确保安全需用强密码、最小权限、严格主机限制、定期审计、避免硬编码敏感信…

    2025年12月5日 后端开发
    000
  • 如何用php操作mysql更新查询结果

    1. 使用AJAX 现代前端开发中,AJAX技术的普及让JavaScript与后台通信变得更加便捷。通过AJAX,能够方便地获得PHP页面所生成的数据,并用于实现动态更新网站。 AJAX从PHP获取数据(一般为JSON),然后使用DOM操作更新HTML元素以更新数据。这使得我们能够实时更新数据,而不…

    数据库 2025年12月5日
    000
  • 如何用php+mysql实现一个购物车功能

    一、购物车功能概述 把购物车视为在线商城的核心功能,用户可以将需要购买的商品加入购物车,以备将来下单购买。为了更好地管理订单和付款,购物车允许用户更改商品数量和删除商品。 二、实现购物车的基本步骤 在使用PHP和MySQL实现购物车功能之前,让我们先来看一下实现购物车的基本步骤: 立即学习“PHP免…

    数据库 2025年12月5日
    000
  • golang如何操作mysql数据

    什么是 MySQL 由Oracle公司赞助开发的MySQL是一种广泛应用于互联网基础设施中的关系型数据库管理系统。它支持多种操作系统和编程语言,包括 Go 语言,并且拥有一系列对于大型数据集成和高性能查询支持良好的特性。 MySQL使用基于表的数据结构,每行代表一个记录,每列代表一个字段。它使用 S…

    数据库 2025年12月5日
    100
  • 解决PHPMyAdmin操作数据库时的死锁问题和预防措施

    死锁发生时,数据库系统会自动回滚一个事务以解除僵局,用户可通过show engine innodb status;诊断死锁原因,并在必要时通过kill命令终止问题进程;根本解决方法包括:1.保持事务短小,减少锁持有时间;2.统一资源访问顺序,避免交叉等待;3.为查询添加合适索引,减少锁定范围;4.使…

    2025年12月5日 后端开发
    000
  • MySQL如何存储IP值

    存储IP值 IP值一般使用char或varchar进行存储,但是当进行查找和统计时,字符类型不是很高效。MySQL数据库内置了两个IP相关的函数INET_ATON()、INET_NTOA(),可以实现 IP 地址和整数类型的转换。转换后使用可以INT UNSIGNED 来存储IP,转换后的数字是连续…

    数据库 2025年12月5日
    000
  • MySQL的启动与关闭怎么实现

    一、MySQL的启动 MySQL的启动的方式有两种,一种是使用命令行启动,另一种是使用服务启动。 1、使用命令行启动 在命令行中输入以下命令可以启动MySQL: $ sudo systemctl start mysql 启动成功后,可以通过以下命令来检查MySQL的状态: $ sudo system…

    数据库 2025年12月5日
    000
  • 从连接到插入:PHP操作MySQL全流程

    1.使用mysqli扩展建立与mysql数据库的连接;2.编写sql语句准备操作数据;3.执行sql语句完成数据插入等操作;4.通过预处理语句防止sql注入攻击;5.使用try…catch块处理连接错误;6.通过持久连接、索引、避免select *、批量插入、缓存和优化sql语句提升性能…

    2025年12月5日 后端开发
    000
  • 如何在Laravel中使用软删除恢复

    在laravel中恢复软删除数据的方法主要有两种:对单个模型调用restore()方法,或通过withtrashed()查询后调用restore()批量恢复。1. 恢复单个模型:使用withtrashed()->find()获取软删除记录,再调用restore()将其deleted_at设为n…

    2025年12月5日
    000

发表回复

登录后才能评论
关注微信