首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

恒讯科技讨论:MySQL内部如何工作的?

MySQL是一个开源的、Oracle支持的基于结构化查询语言(SQL)的关系数据库管理系统(RDBMS)。它可以在所有主要平台上运行,包括Windows、Linux和UNIX。尽管MySQL的应用范围很广,但它最常与在线发布和Web应用程序相关联。

在本文中,小编将和大家一起讨论MySQL内部如何工作的?包括它的内部工作原理和组件。

一、MySQL的工作原理

MySQL遵循客户端-服务器模型。MySQL的核心是MySQL服务器,它管理所有数据库命令或指令。基本上,MySQL服务器可用作用户嵌入到单独应用程序中的库,也可用作客户端服务器网络环境的独立程序。

此外,MySQL还运行多个支持MySQL数据库管理的实用程序。用户通过计算机上的MySQL客户端向MySQL服务器发送命令。

此外,MySQL的设计使其能够快速管理大型数据库。虽然MySQL通常驻留在一台机器上,但它将数据库发送到多个位置,因为用户可以通过不同的MySQL客户端界面访问它。这些接口将SQL语句传输到服务器,然后显示结果。

二、MySQL的组件

当然,MySQL架构由三层或三端组成。架构的层次包括顶部的查询执行端(或客户端)、中间的服务器资源端和底部的存储引擎。数据库架构定义了系统的存储端、客户端、客户端之间的交互和关系。下面我们详细讨论各个层。

1、客户端

MySQL结构的客户端是数据库系统最终用户与之交互的组件。我们可以通过命令提示符或图形用户界面向服务器提交多个MySQL命令。

对于每个有效的命令提交,屏幕上都会显示有效的输出。对于每个错误的命令提交,系统都会将错误通知作为反馈转发到屏幕。客户端提供的一些关键服务是:

(1)连接处理

当我们向服务器端提交请求时,服务器会确认该请求。连接立即建立以允许我们执行更多请求。此功能称为连接处理,是该结构的客户端的一项功能。

(2)验证

当用户连接到MySQL服务器时,身份验证发生在服务器端。客户端组件借助用户名和密码完成身份验证。

(3)安全

通过身份验证后,用户成功连接到MySQL服务器。之后,服务器检查特定用户是否具有对MySQL服务器进行特定查询所需的必要权限。

2、服务器端

MySQL架构的第二层也被称为“MySQL架构的大脑”。这是因为该层控制MySQL关系数据库管理系统的所有逻辑功能。当客户端向服务器提交请求时,服务器一旦与指令匹配就提供输出。MySQL服务器的子组件包括:

(1)线程处理

客户端向服务器发送成功请求后,服务器接受请求,客户端进行连接。这种连接称为线程。该架构的服务器端有助于处理称为线程处理的过程中的每个线程。线程处理功能通过架构的服务器端执行。此外,线程处理模块还管理由线程执行的客户端查询。

(2)解析器

数据库中的数据通过称为词法分析的操作分解为多个标记。解析器是一个软件组件,它生成给定输入的数据结构/解析树。之后,MySQL的解析器包括语法规则模块和词法扫描器。词法扫描器将整个输入分解为标记,而语法规则模块则查找创建此序列的SQL语法规则组合并运行与这些规则关联的代码。最后,解析器生成一个解析树,供优化器使用。与某些将查询的文本表示形式转换为字节代码的解析器相反,MySQL的解析器将其转换为程序内存中内部互连的C++/C结构。

(3)优化器

解析完成后,系统会在优化器块上应用不同类型的优化技术。这些技术可能包括查询重写、正确的索引选择和扫描表的顺序。在这里,MySQL使用基于成本的方法进行优化。

当然,MySQL会尝试预测不同执行计划的成本并选择最便宜的。最初,成本单位是单个任意4 KB数据页读取。然而,它变得更加复杂,并包括运行WHERE子句比较的成本等因素。

(4)查询缓存

查询缓存存储输入查询语句的整个结果集合。在解析查询之前,服务器会查阅查询缓存,该缓存仅存储SELECT语句及其结果集。如果用户提交的查询与缓存中已有的查询类似,服务器会跳过查询的解析、优化和执行。服务器仅中继其先前存储的结果集。

之后,当服务器从分配给变量“query_cache_size”的值启动时,MySQL 会同时初始化并为查询缓存分配特定数量的内存。如果您更新此变量或将其设置为其当前值,MySQL将删除所有缓存的查询,将缓存中断到特定大小,并重新启动缓存内存。

总而言之,MySQL是一种广泛使用、经过时间考验、功能齐全的现代关系数据库管理系统。世界各地的组织都将其用于关键任务业务数据处理和存储,作为面向消费者的流行应用程序的后端,以及作为强大的Web软件堆栈的一部分。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O19ku1Ge8ZO7t6yIF98-EhRQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券