MySQL原理之SQL解析流程
-
连接层
-
应⽤程序(php,python,代码)连接mysql时,⾸先会进过连接池(创建数据库连接是很耗时且消耗资源的,数据库会提供连接池,保持连接,允许应⽤程序重复使⽤⼀个现有的连接,⽆须重复新建,省资源,减轻数据库压⼒),建⽴连接后,进⼊SQL解析层
-
-
SQL层
-
这⼀层是解析SQL语句,⾸先判断SQL正确性,是否符合DDL、DML、DCL语句规则
-
根据不同的类型,命令分发模块转发给对应的模块处理
-
有缓存则直接返回给应⽤程序
-
解析这件事由Parser解析器来对SQL进⾏词法分析(因为SQL可以是⼀个组合的,复杂、较⻓的语句),最终分析出⼀个或者多个SQL语句的执⾏计划
-
-
-
得到执⾏计划后,还不会⽴即执⾏,因为解析器可能给出了SQL的多种执⾏⽅式,还要再进⼀步的判断,怎么执⾏才是最⾼效的。
-
mysql内部有⼀个查询优化器(Optimizer)根据⾃身的算法,找到⼀个最⾼效的⽅式执⾏SQL(例如有合理索引的那⼀条SQL)
-
-
当优化器确定了执⾏计划,是不是就可以⽴即执⾏了?不是,因为即使你确定了SQL可以执⾏了,但是你是不是有权限执⾏,对吧
-
在SQL层内部对权限也检查后,SQL语句终于执⾏了,最后把执⾏后的结果,交给最底层的存储引擎接⼝(发动机),存储引擎和操作系统交互,读取到磁盘上的数据(发动机喝油开始⼲活了)。
-
最终SQL执⾏完毕,本次获取的数据,常规下更新到缓存中,便于下次加速查询。
-