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限制返回的行数

相关推荐
2501_9378609429 分钟前
MySQL表的操作:创建、查看、修改、删除完整实战
android·数据库·mysql
奇特認4 小时前
mysql 集群技术 3.高可用之 MHA
数据库·mysql
Bioinfo Guy7 小时前
高分Panel复现系列|转录因子网络太乱?用模块框把重点圈出来
数据库·生物信息学·生信可视化
ltl8 小时前
Disaggregated DB 合集:Socrates、PolarDB、Taurus 的共同模式
数据库
Blossom i10 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
InfinitePlus11 小时前
Docker MySQL搭建一主一从
mysql·docker
雾时之林11 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
老纪的技术唠嗑局13 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
坐吃山猪13 小时前
Docker07-MySQL
mysql·docker·容器
CLOUD ACE13 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售