image.png
    1.查询缓存:
    server如果在查询缓存中发现了这条sql语句,就会直接奖结果返回给客户端;如果没有,就进入到解析器阶段。因为查询缓存往往效率不高,所以mysql8.0之后抛弃了这个功能。
    两个查询请求在任何字符上的不同,都会导致缓存不会命中,因此查询缓存命中率不高。
    2.解析器:
    在解析器中对sql语句进行语法分析、语义分析。
    词法分析:你输入的是由多个字符串和空格组成的一条sql语句,mysql需要识别出里面的字符串分别是什么,代表什么。
    语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断你输入的这个sql语句是否满足mysql语法。
    如果你的语句不对,就会收到“you have an error in your sql syntax”的错误提醒。
    image.png
    3.优化器
    在优化器中会确定sql语句的执行路径,比如是根据全表检查,还是根据索引检索等。
    一条查询可以有很多种执行方式,最后都返回相同的结果。优化器的作用就是找到这其中最好的执行计划。
    sql查询优化分成逻辑查询优化和物历查询优化

    • 物理查询优化则是通过索引和表连接方式等技术来进行优化
    • 逻辑查询优化就是通过sql等价变换提升查询效率,直白一点说,换一种查询写法执行效率可能更高。

    4.执行器
    在执行之前需要判断该用户是否具备权限。如果没有,就会返回权限错误。如果具备权限,就执行sql查询并返回结果。
    image.png
    image.png