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

相关推荐
Highcharts.js6 小时前
Highcharts Grid 中文站正式上线:表格数据处理的全新选择
前端·javascript·数据库·表格数据·highcharts·可视化图表·企业级图表
Elastic 中国社区官方博客9 小时前
Elasticsearch:使用 Agent Builder 的 A2A 实现 - 开发者的圣诞颂歌
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
2301_816660219 小时前
PHP怎么处理Eloquent Attribute Inference属性推断_Laravel从数据自动推导类型【操作】
jvm·数据库·python
qq_3721542310 小时前
Go 中自定义类型与基础类型的显式转换规则详解
jvm·数据库·python
_下雨天.10 小时前
NoSQL之Redis配置与优化
数据库·redis·nosql
LiAo_1996_Y11 小时前
CSS如何实现文字渐变效果_通过background-clip实现艺术字
jvm·数据库·python
2401_8877245011 小时前
CSS如何让表单在手机端友好展示_利用Flexbox实现堆叠排版
jvm·数据库·python
数据库小组11 小时前
MySQL 删库后怎么恢复?binlog2sql 之外,NineData 还能做什么
数据库·sql·mysql·安全·数据·ninedata·删库
zhangchaoxies11 小时前
Layui轮播图(carousel)怎么设置自动播放间隔
jvm·数据库·python
切糕师学AI11 小时前
HBase:一文搞懂分布式宽列数据库(原理 + 架构 + 实战)
数据库·分布式·nosql·hbase·分布式宽列数据库·wide column db