扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍MySQL中SQL语句执行流程是怎么样的,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
成都创新互联公司于2013年成立,先为龙亭等服务建站,龙亭等地企业,进行企业商务咨询服务。为龙亭企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。总的来说,MySQL逻辑架构可以分为server层和存储引擎层这两个部分。这篇文章记录的是SQL语句执行流程,主要是发生在server层上面的事。
server层主要包括了MySQL数据库大多数的功能,毕竟执行SQL大部分是在这一层去实现的嘛^_^。这一层细分下来可以分为:查询缓存(query cache 有的简称QC),解析器也可叫分析器,预处理器(其实也可以归在分析器里面),查询优化器等。
存储引擎层主要的工作是存储、提取数据。当前主要的存储引擎种类有:InnoDB,MyISAM,tokuDB等,他们的区别如下:
在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语句执行流程是怎么样的”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联-成都网站建设公司行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流