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

相关推荐
小冷coding5 小时前
【MySQL】MySQL 插入一条数据的完整流程(InnoDB 引擎)
数据库·mysql
鲨莎分不晴6 小时前
Redis 基本指令与命令详解
数据库·redis·缓存
专注echarts研发20年6 小时前
工业级 Qt 业务窗体标杆实现・ResearchForm 类深度解析
数据库·qt·系统架构
周杰伦的稻香8 小时前
MySQL中常见的慢查询与优化
android·数据库·mysql
冉冰学姐8 小时前
SSM学生社团管理系统jcjyw(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·学生社团管理系统·多角色管理
nvd119 小时前
深入分析:Pytest异步测试中的数据库会话事件循环问题
数据库·pytest
appearappear9 小时前
如何安全批量更新数据库某个字段
数据库
·云扬·10 小时前
MySQL 常见存储引擎详解及面试高频考点
数据库·mysql·面试
羊小猪~~10 小时前
【QT】--文件操作
前端·数据库·c++·后端·qt·qt6.3
coding-fun11 小时前
电子发票批量提取导出合并助手
大数据·数据库