mysql的sql语句执行流程

  

1,客户端和服务器建立连接,客户发送至sql服务器(对应连接器这一过程)

  

2,服务器如果在查询缓存中发现了该sql,则直接使用查询缓存的结果返回给客户,如果查询缓存中没有,则进入下面的步骤(对应查询缓存这一过程,8.0这一过程已经不存在了,8.0完全抛弃了这个功能)

  

3,服务器对sql进行语法分析,识别出sql里面的字符串是否符合标准,比如选择关键字不能写错(对应分析器这一过程)

  

4,服务器对sql进行语义分析,识别出sql里面的字符串的具体意思是什么,比如T1是表名,C1是列名(对应分析器这一过程。3、4步其实解析的过程,这个解析的过程是分析器的工作不是优化器的工作)

  

5,服务器确定sql的执行路径,比如走索引还是全表,多表连接时哪张表先走哪张表后走,当你的那里的条件的可读性和效率有冲突时mysql内部还会自动进行优化,也就是大家理解的重写在子句(对应优化器这一过程)

  

6,服务器对执行sql的用户进行权限检查,比如对表是否有权限执行(对应执行器这一过程)

  

7、服务器执行该sql语句,发送结果给客户(对应执行器这一过程)

     

连接器——在查询缓存,在分析器——在优化器——在执行器

        

如果表T1中没有字段C1,而执行select * from T1, C1=1会报错不存在C1这个列,这个过程对应上面第4个过程,对应分析器这一过程

     

如果用户对T1表没有权限,而执行select * from T1, C1=1会报错对表T1没有权限,这个过程对应上面第6个过程,对应执行器这一过程

mysql的sql语句执行流程