MySql基础架构以及SQL语句执行流程
01. mysql基础架构
SQL语句是如何执行的
学习一下mysql的基础架构,从一条sql语句是如何执行的来学习。
一般我们写一条查询语句类似下面这样:
select user,password from mysql.user;
这样就可以返回一个结果,但却不知这条语句的内部执行流程。
如下是mysql的逻辑架构图:

Mysql可以分为Server层和存储引擎层二部分。
Server层有连接器/缓存/分析器/优化器/执行器,涵盖了mysql的很多核心功能。
存储引擎层负责数据的存储和读取,支持Innodb,MyIsam,Memory,BlackHole等,Mysql5.5版本后默认的存储引擎是Innodb。
接下来我们一层一层来看SQL语句的执行过程。
1)连接器
首先客户端连接mysql时就是连接到了连接器上,连接器负责跟客户端建立连接/校验用户身份,获取权限。连接命令一般如下:
mysql -h ip地址 -P 端口 -u 用户 -p
当客户端输入完了用户名和密码开始连接时,连接器会校验:
- 如果用户名或者密码不正确,客户端会收到一个“Access denied for user”的错误。
- 如果用户名和密码校验正确,连接器会检查用户所拥有的权限。之后,这个连接里的权限逻辑判断,都依赖此时读到的权限。
这就意味着一个用户成功建立连接之后,即使你用管理员把这个用户的权限更改了,也是不会影响到已经连接的这个用户,除非这个用户断开重新连接。让连接器重新读取权限才可以。
2)查询缓存
连接建立成功之后,你就能够执行select等语句了,这时就会进行第二步:查询缓存
Mysql收到一个sql请求之后,先检查缓存,看看之前是不是有执行过。如果执行过并缓存没有过期,结果会以key-value的形式存储在内存中,key是查询语句,value是查询结果。如果有缓存,直接把对应的value返回给客户端。
如果语句不在查询缓存中,就会向下执行下面的阶段,执行完成后,会把结果放到缓存中。
查询缓存的失效很平凡,因为只要更新一个表,那么这个表的所有查询缓存结果都会被清空,所以对经常变更的表,查询缓存的命中率很低。除非这个表数据比较稳定,不经常改变,才适合查询缓存。
了解下:Mysql8.0版本之后,查询缓存的功能就被删了。
3)分析器
如果没用命中缓存,分析器就开始工作了,对sql语句进行解析。
首先分析器会做“词法分析”,你输入的多个字符加上空格组成的sql语句,分析器需要分析出来里面字符分别都代表什么。
如从你输入的"select"关键字开始,mysql知道这是一个查询语句,然后分析出那个是表名,那个是你输入的条件等等。
做完了词法分析,开始做“语法分析”,根据词法分析的结果,语法分析会判断你输入的这条sql语句是否符合Mysql语法。
如果你的语句不对,就会收到“You have an error in you SQL syntax”的错误提醒,如果下面这个语句select少打了开头的字母“s”。
mysql> elect * from stu;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from stu' at line 1
一般语法错误会提示第一个出现错误的位置,所以你要关注的是紧接着“use near”后面的内容。
4)优化器
经过了分析器,Mysql已经知道你要做什么了,在开始执行之前,还需要经过优化器的处理。
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联的时候,决定各个表的连接顺序。
5)执行器
Mysql通过分析器知道了你要做什么,通过优化器知道了如何做,接下来就是执行器开始执行语句;
开始执行之前, 会先判断你对要操作的表或库有没有权限,如果没有就返回权限的错误。
如果有权限,就打开表继续执行。打开表的时候,执行器会根据表的引擎定义,去使用这个引擎提供的接口。
比如这个select语句:select * from db1 where ID=100;
- 先调用Inodb引擎接口获取表的第一行,判断ID值是不是100,如果不是则跳过,如果是则将结果存在结果集中;
- 调用引擎接口获取“下一行”,重复相同的判断逻辑,直到读取这个表的最后一行。
- 执行器将上述遍历过程所有符合要求的结果返回给客户端。
至此,这个select语句算是执行完了。
数据库的慢查询日志中会看到rows_examined的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。
有些情况下,执行器调用一次,在引擎内部则扫描了多行,因此引擎扫描行数跟rows_examined并不完全相同。
这样Mysql的逻辑架构和流程过了一遍,我也对整个sql语句的执行过程的各个阶段有了一个初步的认识。也希望能对大家有帮助。
MySql基础架构以及SQL语句执行流程的更多相关文章
- MySQL基础架构之查询语句执行流程
这篇笔记主要记录mysql的基础架构,一条查询语句是如何执行的. 比如,在我们从student表中查询一个id=2的信息 select * from student where id=2; 在解释这条 ...
- 3、myql的逻辑架构和sql的执行流程
msyql逻辑架构 逻辑架构的解析 逻辑架构图如下(序号代表的是:服务器处理客户端请求的流程) 1.1connectors connectors是指使用不同语言的客户端与mysql server服务器 ...
- 【原创】3. MYSQL++ Query类型与SQL语句执行过程(非template与SSQLS版本)
我们可以通过使用mysqlpp:: Query来进行SQL语句的增删改查. 首先来看一下mysqlpp::Query的一些最简单的调用, conn.connect(mysqlpp::examples: ...
- mysql基础复习(SQL语句的四个分类),
( ...
- mysql优化:explain分析sql语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...
- [转]使用mysql profiles 来查看sql 语句执行计划
From : http://blog.csdn.net/radkitty/article/details/4632289 要使用该功能,mysql的版本必须在5.0.37版本以上.否则只能使用expl ...
- mysql优化–explain分析sql语句执行效率
Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 果,可以帮助选择更好的索引和优化查询语句,写出更好的优 ...
- Mysql explain分析sql语句执行效率
mysql优化–explain分析sql语句执行效率 Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效 ...
- sql语句执行的时间
统计mysql里每条SQL语句执行的时间 收藏 CrazyHarry 发表于 2年前 阅读 3785 收藏 8 点赞 3 评论 3 Google.Github 双重认证前端课程,独家硅谷内容,每周直播 ...
随机推荐
- Netty中的责任链模式
适用场景: 对于一个请求来说,如果有个对象都有机会处理它,而且不明确到底是哪个对象会处理请求时,我们可以考虑使用责任链模式实现它,让请求从链的头部往后移动,直到链上的一个节点成功处理了它为止 优点: ...
- 【Java中级】(二)集合框架
2.1.ArraList 1.自增长 容器的容量"capacity"会随着对象的增加,自动增长 只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题. 2.常用方法 关键字 ...
- PHP-- B/S结构
B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件.这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简 ...
- python的乘法口诀表
python的乘法口诀表 python的乘法口诀表 用python来写一个脚本,使得这个脚本在运行后自动输出乘法口诀表. pyton的脚本如下: #!/usr/bin/env python #codi ...
- helm安装MINIO文件服务器
MinIO Quickstart Guide MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例 ...
- 重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印
重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端 ...
- HPU暑期集训积分赛1
A. Nth power of n 单点时限: 1.0 sec 内存限制: 512 MB 求 nn 的个位数. 输入格式 多组输入,处理到文件结束.每组数据输入一个 n.(1≤n≤109) 输出格式 ...
- 在ABP中灵活使用AutoMapper
demo地址:ABP.WindowsService 该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇. AutoMapper简介 Auto ...
- 续集:白菜的内涵,更新nand分区为ubifs,替换overlay
在上一篇真千兆路由的极限之OPENWRT MAKE, 某品牌白菜价QCA9558/QCA9880/QCA8337N纯种组合OS搭建时记中附带了128M nand的空间图示,在ar71xx profil ...
- 以太坊RLPx传输协议
本文主要内容翻译自:The RLPx Transport Protocol,其中添加了一些个人的理解,由于密码学水平有限,不正确之处望指正.另外原文可能已经更新,最新内容请直接阅读原文. 本文档定义了 ...