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执?完毕,本次获取的数据,常规下更新到缓存中,便于下次加速查询。
-