温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MySQL中SQL语句执行流程是怎么样的

发布时间:2021-10-26 17:21:06 来源:亿速云 阅读:109 作者:小新 栏目:MySQL数据库

这篇文章主要介绍MySQL中SQL语句执行流程是怎么样的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

总的来说,MySQL逻辑架构可以分为server层和存储引擎层这两个部分。这篇文章记录的是SQL语句执行流程,主要是发生在server层上面的事。

server层主要包括了MySQL数据库大多数的功能,毕竟执行SQL大部分是在这一层去实现的嘛^_^。这一层细分下来可以分为:查询缓存(query cache 有的简称QC),解析器也可叫分析器,预处理器(其实也可以归在分析器里面),查询优化器等。

存储引擎层主要的工作是存储、提取数据。当前主要的存储引擎种类有:InnoDB,MyISAM,tokuDB等,他们的区别如下:

MySQL中SQL语句执行流程是怎么样的

在InnoDB和MyISAM这两种存储引擎中,当前使用较广的是InnoDB,MyISAM由于不支持事务,不支持行锁等原因在8.0版本后已经被彻底废弃了。从MySQL5.5版本开始,InnoDB成为MySQL数据库默认的存储引擎。

先说结论吧,一条SQL语句从客户端发起后,到MySQL数据库,先会进行一系列验证(比如查询/更新权限),接着到查询缓存,再到解析器,查询优化器,完成执行语句的操作从存储引擎中调取结果返回给客户端。

一、连接&&验证权限

MySQL的连接主要有两种方式,一种是从服务器本地发起的,通过root用户,使用socket登录,还有一种是我们从客户端发起的属于远程连接,一般来说远程连接数据库通常需要输入的几个要素:用户名、密码、端口号、IP地址。

连接首先验证的是密码是否正确,当前用户在当前IP是否有权限登录等,登录完成后,该登录用户会具有当前已分配给他的权限(增删改查等)。

二、查询缓存

上一步的验证完成后,SQL执行就会来到查询缓存(query cache),看是否有执行过该SQL语句缓存有该SQL执行结果,如果有,直接取出结果返回给客户端,如果没有则进行下一步的查询。

不可否认,如果每次都能在查询缓存中获取数据,这个效率是很高的。但是对于实际应用中,并不建议使用查询缓存。因为查询缓存只能针对静态数据不能针对动态数据,很可能好不容易缓存好的数据,其中有表发生了更新,一下子缓存好的数据就被清掉了。而在8.0版本后,这功能也被彻底废弃了,在8.0之前的版本一般是建议关闭查询缓存功能的。

三、解析器

在第二步的查询缓存中没能获取或者说没能命中查询缓存,就会首先进行SQL解析,包含语法,语义解析:是要进行查询还是更新操作,语句写的有没问题之类的,生成一个解析树,提交给下一步。

四、预处理器(其实也可以归在解析器里面)

将第三步中解析过的解析树进行预处理,相对于第三部来说会进行更深层次的判断,比如表/列是否存在之类的,会把解析树处理为更为平衡的平衡树结构。

五、查询优化器

预处理完成后,来到查询优化器,这里决定了比如走哪个索引等,转化前面的平衡树为执行计划,并选出一个数据库认为是最优的执行计划进行SQL的执行。

六、SQL执行

从存储引擎层调取需要的数据,返回给客户端,至此,流程结束。

以上是“MySQL中SQL语句执行流程是怎么样的”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI