MySQL原理之SQL解析流程

 

 

 

 

 

SQL解析流程

  • 连接层

    • 应⽤程序(php,python,代码)连接mysql时,⾸先会进过连接池(创建数据库连接是很耗时且消耗资源的,数据库会提供连接池,保持连接,允许应⽤程序重复使⽤⼀个现有的连接,⽆须重复新建,省资源,减轻数据库压⼒),建⽴连接后,进⼊SQL解析层

  • SQL层

    • 这⼀层是解析SQL语句,⾸先判断SQL正确性,是否符合DDL、DML、DCL语句规则

    • 根据不同的类型,命令分发模块转发给对应的模块处理

      • 有缓存则直接返回给应⽤程序

        • 解析这件事由Parser解析器来对SQL进⾏词法分析(因为SQL可以是⼀个组合的,复杂、较⻓的语句),最终分析出⼀个或者多个SQL语句的执⾏计划

    • 得到执⾏计划后,还不会⽴即执⾏,因为解析器可能给出了SQL的多种执⾏⽅式,还要再进⼀步的判断,怎么执⾏才是最⾼效的。

      • mysql内部有⼀个查询优化器(Optimizer)根据⾃身的算法,找到⼀个最⾼效的⽅式执⾏SQL(例如有合理索引的那⼀条SQL)

    • 当优化器确定了执⾏计划,是不是就可以⽴即执⾏了?不是,因为即使你确定了SQL可以执⾏了,但是你是不是有权限执⾏,对吧

    • 在SQL层内部对权限也检查后,SQL语句终于执⾏了,最后把执⾏后的结果,交给最底层的存储引擎接⼝(发动机),存储引擎和操作系统交互,读取到磁盘上的数据(发动机喝油开始⼲活了)。

    • 最终SQL执⾏完毕,本次获取的数据,常规下更新到缓存中,便于下次加速查询。

 

posted @ 2022-06-19 17:27  屯子里唯一的架构师  阅读(396)  评论(0编辑  收藏  举报