一条SQL在MySQL中是如何执行的
MySQL内部结构
-
连接器:进行权限的认证,认证时,mysql会在连接器内划分一小块缓存空间,用来缓存用户的权限,因此,当在表中修改用户权限时,如果不重新连接,会发现权限是没有变化的。
-
查询缓存:mysql的查询缓存默认是关闭的,对于一些不经常插入、更新的表可以开启缓存。但是此功能很鸡肋,在mysql8.0以后已经移除该功能,因为当我们费劲力气缓存数据后,只要有对一个表的更新,这个表上所有的查询缓存都会被清空。
-
词法分析器:当我们sql有错误时,常常会收到“You have an error in your SQL syntax”的错误提醒,这就是词法分析器起到了作用。
-
语法分析器:语法分析器会生成一个语法树,来规定sql语法的构成,例如select后面要跟fleids。
- 优化器:优化器会帮我们优化sql,该走哪个索引,或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
时候,决定各个表的连接顺序。 - 执行器:开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如果有,调用引擎执行sql。