mysql 一条查询语句执行过程顺序

整体架构

client connectors:

mysql提供各种语言连接客户端api,client发送sql语句到server端进行执行

连接器(Connectors):连接器负责客户端与服务端进行连接,使用mysql协议或X协议使得客户端可以通过api能够访问mysql底层资源,执行sql语句。mysql提供多种语言的连接器,基本上常见的语言都有。

连接控制:当客户端连接数据库时,会根据服务端配置来校验当前客户端允不允许连接数据库,比如ip配置是否运行,是否达到最大连接数等。

用户认证:校验登录用户名密码信息,IP或者可能的证书信息。

权限校验:获取当前用户操作权限、每次在分析发送sql语句前校验当前用户是否有对应数据操作权限。

MySQL Server (mysqld)

mysqld是服务端主要的程序,包含有以下几个服务功能。

SQL接口(SQL Interface):所有数据库可执行语句,包括DML、DDL、存储过程、视图、触发器等的语法接口定义。还有内置函数定义。这些东西都是跨存储引擎的。都是在mysqld中定义实现的。

分析器(Query Parser):一条语句发送到服务端,首先会分析sql语句的语法是否正确,将整个语句解析成不同的部分,供后面执行使用。

优化器(Query Optimizer):对解析后的sql语句不同的执行计划进行评估,选择合适的执行计划来提高数据库执行效率。比如多个索引时如何使用索引,多个表关联查询时关联顺序是怎样的。这个时候一些执行计划的统计及耗时记录是有存储引擎来完成的,优化器会和具体执行引擎进行交互来选择效率高的执行计划。

缓存和缓冲区(Caches & Buffers):这里缓存的种类有很多。像缓存了打开的表的信息,避免频繁的打开和关闭表。存储引擎的数据缓存,查询缓存等等有很多。主要是为了提高性能。

存储引擎

存储引擎负责数据库中数据的存储、提取和管理。mysql存储引擎是插件式的模式,用户可以方便使用不同的存储引擎,常见存储引擎InnoDB、MyISAM、Memory等。在创建表时候可以使用ENGINE=InnoDB来指定使用存储引擎,从5.5版本开始,默认存储引擎是InnoDB。

文件系统

文件系统存储不同类型数据。有数据文件、索引文件、日志文件等。

查询语句执行顺序

1、首先是from,join来确定表和数据范围

2、where对数据进行筛选过滤

3、group by分组和having过滤

4、select抽取对应的列,如果有DISTINCT 进行去重。

5、合并各组的结果进行order by 排序

6、LIMIT限制返回的行数

相关推荐
麦壳饼7 小时前
架构深度解析:SonnetDB 的写入与查询路径
数据库·sonnetdb
福兮说7 小时前
IP 地址转整数的七个坑:192.168.1.1 算出负数、127.1 也是合法地址、存进 INT 直接溢出
javascript·网络·网络协议·tcp/ip·mysql·golang
gudufy7 小时前
ASP.NET Core 多租户如何动态创建数据库?数据库初始化怎么做?
数据库·blazor·admin
Data-Miner8 小时前
离线AI制表:模型适配与脚本固化实操
大数据·数据库·人工智能·excel
xixiaoyunya8 小时前
数据库三种备份方式怎么组合?从原理到落地的完整方案
数据库
2501_933670798 小时前
2027届数学与应用数学转经营分析:SQL、财务指标与业务指标补齐路线
数据库·sql·数学建模
我科绝伦(Huanhuan Zhou)8 小时前
oracle坏块导致备份不了
数据库·oracle·ffmpeg
IT大白鼠8 小时前
图数据库系列 · 第 08 篇——面试收官:高频题与全景总结
数据库·面试·职场和发展·nosql·图数据库
xixiaoyunya9 小时前
定时备份数据库怎么规划周期?一套“少打扰业务、真能恢复“的策略
数据库
liangshanbo12159 小时前
主系统登录后,子系统怎么实现自动登录?
java·网络·数据库