MYSQL 执行流程

1. 借鉴

极客时间MySQL实战45讲 力推
MySQL实战 | 01-当执行一条 select 语句时,MySQL 到底做了啥?
Query Cache,看上去很美
mysql: show processlist 详解
MySQL processlist的state属性详解
一句 mysql#show processlist 引发的思想“革命”
Mysql源码学习——词法分析MYSQLlex
MySQL-词法分析
MySQL · 源码分析 · 词法分析及其性能优化
MySQL内核源码解读-SQL解析之解析器浅析
【Mysql源码分析】mysql词法分析
【Golang源码分析】解析执行命令complie(二)词法解析
编译原理之lex,yacc学习
Lex+YACC详解
YACC基本用法
这个翻译的跟屎一样的是答案:无法编译flex&bison(未找到符号x86_64) (Can't compile flex & bison (Symbols not found x86_64))
SQL解析在美团的应用
MySQL架构与SQL执行流程

2. 开始

MYSQL基础架构

MYSQL基础架构

MYSQL大体上可分为Server和存储引擎层。

  • Server层主要包含(简记为:CAOE)连接器,分析器,优化器,执行器,所有的内置函数以及存储过程,触发器,视图。
  • 存储引擎层负责数据的存取和提取,如InnoDB,MyISAM,Memory。
  • MYSQL在8.0+去除掉了查询缓存

那当我们执行一条sql如SELECT ID,NAME FROM T_USER WHERE USER_ID = 1;,MYSQL都做了些什么呢?我们来看看mysql的执行流程

MYSQL执行流程

连接器

首先,我们先连接到mysql中,此时接受连接请求的是server层的连接器,连接器负责跟客户端建立连接、获取权限、维持和管理连接。
我们使用mysql的客户端来连接mysql,在完成TCP三次握手之后,连接器首先会验证身份,然后根据权限表验证身份。

mysql -h127.0.0.1 -P3306 -uroot -p123456

连接完成后,如果没有其他操作,使用show processlist可以看到一个sleep的空闲连接。但是如果长时间没有操作,连接器会自动将其断开,时间长短由wait_timeout参数控制,默认是8小时[28800秒](可以使用SHOW VARIABLES LIKE 'wait_timeout';命令查看)。

mysql> show processlist;
+----+------+-----------------+-----------+---------+------+-------+------------------+
| Id | User | Host            | db        | Command | Time | State | Info             |
+----+------+-----------------+-----------+---------+------+-------+------------------+
|  5 | root | localhost:54000 | metastore | Sleep   |    6 |       | NULL             |
|  6 | root | localhost:54002 | NULL      | Query   |    0 | init  | show processlist |
+----+------+-----------------+-----------+---------+------+-------+------------------+
2 rows in set (0.00 sec)

我启动两个客户端,其中一个Sleep(空闲),另一个Query(执行show processlist;)。另外show processlist;只显示100行数据,如果有太多连接,可以使用show full processlist;

分析器

① 词法分析

登录认证之后,MYSQL要执行语句需要知道具体要干啥,需要对语句进行解析。MYSQL首先会对语句进行词法分析。MYSQL需要识别出语句中的关键词以及各个子串代表什么。如从我们上边的查询中识别出SELECT代表一个查询语句,将T_USER识别为表名,将ID和NAME识别为列。

② 语法分析

做完词法分析后,根据词法分析的结果,语法分析器会根据语法规则,判断输入的这个SQL语句是否满足MySQL语法。
如果语法不通过,会报You have an error in your SQL syntax;的提示。
语法通过,分析之后会生成语法树。

SELECT ID,NAME FROM T_USER WHERE AGE > 25 AND LEVEL >= 6;

如以上sql的语句会生成以下语法树:


语法树
③ 总结

MYSQL分析器自实现了词法分析,语法分析使用Bison实现,有关lex,bison,yacc具体可以参照借鉴中的文章,尤其是美团的那篇以及lex,yacc相关介绍篇,算是可以简单入个门。

优化器

经过分析器,MYSQL知道了我们的SQL具体应该如何执行,但是在开始执行之前,需要先优化一番,好吧,我承认这个优化有时候怪怪的,比如选错索引。
比如优化器在表中有多个索引的时候,决定使用的索引;在表进行join时,决定各个表的join顺序;在order by和group by使用的索引;无用条件去除。

执行器

经过优化器的优化,就开始执行语句了。
开始执行时,先查询权限表判断当前用户对表是否有操作的权限,如果没有就会报denied to user 'test'@'localhost' for table 'T_USER'
如果用户有权限,就会打开表继续执行,执行器根据表的引擎的定义,执行引擎提供的接口,执行流程就如下面这个顺序图所画。图中所画为未使用索引的流程,如果用到了索引,就会调用存储引擎的其他接口。

执行器执行流程

3. 大功告成

极客时间的这个课程真的很不错,以上是基于课程的自我理解与整理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 简版执行流程图 待分析SQL如下: 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部...
    Doooook阅读 448评论 0 0
  • 架构 1、 Connector:用来支持各种语言和 SQL 的交互,比如 PHP,Python,Java 的 JD...
    WEIJAVA阅读 1,198评论 0 6
  • 用图文简单记录执行SQL的时候流程,便于自己理解。 连接器 第⼀步,你会先连接到这个数据库上,这时候接待你的就是连...
    时间煮菜阅读 212评论 0 0
  • MySQL执行流程 一共会经历四步,分别是连接、分析、优化与执行。 连接器 连接器会拿着我们输入的IP和端口,去做...
    lvyz0207阅读 126评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,711评论 0 5