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