服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - 一文搞懂MySQL运行机制原理

一文搞懂MySQL运行机制原理

2022-11-23 14:111个俗人 Mysql

这篇文章主要介绍了一文搞懂MySQL运行机制原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

前言

前文我们了解了MySQL采用客户端/服务器架构,用户通过客户端程序发送增删改查需求,服务器程序收到请求后处理,并且把处理结果返回给客户端。这篇文章主要看下MySQL服务端是如何处理客户端的请求,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

MySQL服务器体系架构

MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。

一文搞懂MySQL运行机制原理

网络连接层

客户端连接器:提供与MySQL服务器建立的支持。

服务层

主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。

  • 1) 连接池:存储和管理客户端与数据库的连接。
  • 2) 系统管理和控制工具:集群、备份、安全管理。
  • 3) SQL接口:接受客户端发送的各种SQL命令并返回查询结果。
  • 4) 解析器:解析SQL,生成一颗解析树,验证SQL是否合法。
  • 5) 查询优化器:将解析树转化成执行计划,与存储引擎进行交互。
  • 6) 缓存:各种缓存,比如表、记录、权限等等,缓存有命中查询结果直接返回。

存储引擎层

负责MySQL中数据的存储与提取,与底层系统文件进行交互,可插拔,常见的两类:MyISAM和InnoDB。

系统文件层

负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,比如日志、配置文件等等。

服务器处理客户端请求

客户端可以向服务器发送增删改查等各类请求,我们来看一下服务器是如何处理客户端发送的请求。

一文搞懂MySQL运行机制原理

连接管理

客户端与服务器进程建立连接,每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互,当该客户端退出时会与服务器断开连接,服务器会把线程缓存起来。

解析与优化

查询缓存

如果两个查询请求在任何字符上的不同都会导致缓存不命中。请求中包含某些系统函数、用户自定义变量和函数、一些系统表也不会被缓存。

只要该表的结构或者数据被修改,则该表的所有高速缓存查询都将无效并删除。

PS:8.0中查询缓存已经删除了

语法解析

如果查询缓存没有命中,就进入查询阶段,服务器先对文本做分析,判断语法是否正确,然后从文本中将要查询的表、各种查询条件都提取出来放到内部使用的一些数据结构上。

算是一个编译过程,涉及词法解析、语法分析、语义分析等阶段。

查询优化

对SQL做优化,生成一个执行计划,表明了应该使用哪些索引进行查询,表之间的连接顺序是怎样的。

我们可以使用Explain来查看某个语句的执行计划。

存储引擎

完成查询优化之后还没有真正去访问真实的数据表,数据的存储和提取操作都封装到了这个模块里。不同存储引擎管理的表具体的存储结构可能不同,采用存取算法也可能不同。

小结

MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。mysql执行查询的过程如下:

  • 客户端先发送查询语句给服务器
  • 服务器检查缓存,如果存在则返回
  • 进行sql解析,生成解析树,再预处理,生成第二个解析树,最后再经过优化器,生成真正的执行计划
  • 根据执行计划,调用存储引擎的API来执行查询
  • 将结果返回给客户端。

到此这篇关于一文搞懂MySQL运行机制原理的文章就介绍到这了,更多相关MySQL运行机制内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7118954918198640654

延伸 · 阅读

精彩推荐
  • Mysql分享MYSQL插入数据时忽略重复数据的方法

    分享MYSQL插入数据时忽略重复数据的方法

    当程序中insert时,已存在的数据不插入,不存在的数据insert。在网上搜了下,可以使用存储过程或者是用NOT EXISTS 来判断是否存在 ...

    MYSQL教程网3692020-01-10
  • MysqlMySQL 触发器定义与用法简单实例

    MySQL 触发器定义与用法简单实例

    这篇文章主要介绍了MySQL 触发器定义与用法,结合简单实例形式总结分析了mysql触发器的语法、原理、定义及使用方法,需要的朋友可以参考下...

    yqwang754574472020-12-03
  • MysqlMYSQL本地安装以及出现的问题解决

    MYSQL本地安装以及出现的问题解决

    这篇文章主要给大家介绍了关于MYSQL本地安装以及出现问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mysql具有一定的参考学习价...

    六月繁花开4772020-09-16
  • Mysqlmysql 5.7.18 免安装版window配置方法

    mysql 5.7.18 免安装版window配置方法

    这篇文章主要为大家详细介绍了mysql 5.7.18 免安装版window配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    MikeDDT0095012020-07-30
  • Mysqlxtrabackup备份还原MySQL数据库

    xtrabackup备份还原MySQL数据库

    这篇文章主要为大家详细介绍了xtrabackup备份还原MySQL数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    MSSQL1232722020-07-31
  • MysqlMySQL实战之Insert语句的使用心得

    MySQL实战之Insert语句的使用心得

    这篇文章主要给大家介绍了关于MySQL实战之Insert语句的使用心得的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学...

    _陈哈哈9002021-02-20
  • MysqlMySQL5.6基于GTID的主从复制

    MySQL5.6基于GTID的主从复制

    这篇文章主要介绍了MySQL5.6基于GTID的主从复制的相关资料,需要的朋友可以参考下 ...

    MYSQL教程网2902020-06-01
  • MysqlMySQL之范式的使用详解

    MySQL之范式的使用详解

    这篇文章主要介绍了MySQL之范式的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    超人不会飞9192021-02-23