sql是关系型数据库的统一标准, 那么在mysql里面,是如何实现sql语句的
执行 与返回的呢?
征途之始:
当某猿 坐在电脑前, 敲下sql语句, 点击运行之后
客户端向MySQL 发起名为短连接的通道, 我们的sql 沿着这条路踏上了征途
征途之中:
当sql 踏上短连接通道之后,就被压缩成了数据包, 一致送到了 MySQL中的码头,在码头上 由线程充当快递员小哥带着sql这个数据包到处跑
缓存区
当线程带着 sql数据包来到了MySQL 中的第一个建筑 -- MySQL 缓存区. 发现当前缓存区大门紧闭,根本进不去.听说当年MySQL 刚出来的时候,这里一度门庭若市, 但是因为在程序王国出现了更加优秀的缓存方案,导致目前缓存区的门可罗雀, 连大门都紧紧封闭,
“估计没有人会打开它了.”
“已经下命令了这里将要被拆掉了”
“…”
解析室
当线程小哥绕过缓存区 .带着sql数据包走到了第一站sql解析室, 里面存放者 sql解析器,将sql放入解析器之中, 只见解析器一阵忙活,将sql从数据包也就是一个包裹的状态恢复成 sql语句原本的样子, 并且将其各个部位进行了检查.发现各个部位都健康,
才让sql 走出解析室, 临走前解析室工作人员给了它一张名为"解析树" 的检查报告.
预处理室
与实际接下来线程小哥继续带着sql语句往下一站奔袭而去, 根据解析室的提示,走向下一个环节,来到了预处理室预处理室中存放者预处理器.,于是线程小哥将sql 放入 预处理器中,预处理器将它身上所带的变量 类似于 此次查询的表名称, 取的别名等,一一检查一遍 看是否有错误的地方
此时sql们开始窃窃私语:
“之前在解析室的时候不是已经检查过了么? 怎么现在还要检查?”
“不知道呀…”
"之前检查的是骨架 也就是被程序猿们称之为 关键字的东西 它们长这样 select ,delete , update , from 等 "
"例如 select tb_stu from 中的 select 与 from "
“那么现在呢?”
"现在检查的是 select tb_stu from 中的 tb_stu "
优化室
等预处理室检查完毕之后, 带着由被添加了几笔的"解析树"报告 ,sql语句晃晃悠悠的来到了优化室,. 只感觉满身疲劳优化室**工作人员**,看了眼 sql, sql一激灵,不敢犹豫连忙把 报告递上, **工作人员**不紧不慢的拿着报告, 然后开始分析
最后优化室**工作人员**开口道:"你的目的和情况我已经了解了, 现在有 两种方式, 第一中时间会很长,并不复杂, 第二种时间相对要少一点, 但是复杂程度也会上升".
"我选第二套方案." : sql如是说道, 其实sql已经不想在这里待下去了,它已经身心具惫.
"你很聪明,其实你没得选,这里不止你一个 sql ,所以 为了效率......": 工作人员一边说,一边把sql 提起来丢到一辆bus上,bus上除了它之外还有几个其他的陌生sql
查询引擎执行器:
当sql从bus上下来, 率先甩开其他sql, 走入了执行器中, 一进门看见类似银行柜台式的布局.
当下跟据优化室工作人员的嘱咐,跑到一个柜台面前坐下, 把报告"解析树", 和优化室工作人员的给的方案清单 一起交给执行器中的工作人员
工作人员一言不发的拿着执行方案等走开了, sql无奈,但是只能等待.
存储引擎:
在百般无聊中sql,听见边上的其他sql们在聊天, 于是宁心静听
sql_A: 这执行器的人去了哪里?怎么要这么久?
sql_B: 这个,我也不知道.但是我之前在bus上碰上一位老前辈,也许它知道
sql_C: …
这时sql_E 一脸倨傲的走进来: "他们这时到存储引擎里面拿数据去了."作为一个长连接,他当然有资本对这群短连接们 倨傲不已.
sql_B 一脸讨好的望向sql_E :“您知道的多,给我们讲讲呗”.
sql_C:对呀…
sql_A: …
…
sql_E 见气氛已经拿捏够了,也不卖关子 开口道:"这时因为执行器工作人员拿着我们每个人的方案去执行,
但是由于每个表的存储引擎不同,所以要根据不同的表,找到对应的存储引擎, 然后与操作系统交互, 从硬盘中拿出数据,给我们.
当然,硬盘有多慢你们也是知道的, 所以有些常用的数据会被留在缓存里面, 这不 从缓存中拿数据的工作人员已经回来了… "
就在这时 只见工作人员提着一个数据箱, 吃力的走过来, 然后把箱子丢给sql
“这是你的数据,拿了赶紧走, 出门右转, 有直接返回客户端的快车”.
sql开心极了,总算可以回去了.
归途
当sql拿着数据箱, 上了归途快车, 途经缓存室, 但是因为缓存室年久失修,所以就不作停留,直接返回数据码头, 连带数据箱一起再次被压缩成数据包, 然后返回了 客户端
被压缩前,想着任务完成了,回去可以休息了
(它不知道的是, 作为一个短链接, 这将是它一生的终点)