mysql语句过程及执行流程

1.用户在发出sql命令之后,mysql的线程管理器会建立或者重用一个线程,建立clientmysql服务器的连接。mysql会根据用户名和用户IP(或主机名),在mysql.user表中查看是否有记录,是否允许连接。

2.用户认证完成之后,会进入commanderdispatcher模块(命令分发),同时会调用Logging Module记录常规日志(所以常规日志中记录的是mysql执行的所有命令,包括一些用户输入错误或者执行失败的命令,谨慎打开,在业务忙时,会增长迅速,可用于出现故障时进行故障复现时使用。)

3.在解析命令之前,会调用querycache module,根据SQL hash值,检查查询缓存中是否有该sql的结果集缓存。

根据SQLhash值查找(跟oracle类似,都是用hash值)。MySQL的结果集缓存并不只能,在表中数据被修改时,无法判断与该表有关的结果集缓存是否失效,所以MySQL对于结果集缓存的处理比较粗暴,只要表中的数据被修改了,则该表在结果集中的缓存全部失效。

4.MySQLSQL解析之后,根据SQL类型不同,调用不同的模块进行处理,如查询优化,修改,复制,统计,表的维护等模块。

5.解析并处理SQL之后,验证用户权限,是否有足够的权限执行该操作。

6.最后根据提供的接口,调用不同表对应的不同存储引擎的具体实现。

从调试跟踪一条SQL语句的执行过程可以发现,在mysql中执行一条SQL语句,mysql的处理主要在于两个函数,其中一个是mysql_parse,这个函数模块是把执行一条SQL语句分成了两部分,一部分为分析SQL语句,parse_sql函数的主要功能,第二个部分是执行SQL语句,mysql_execute_command函数完成的功能,两者结合起来,一起完成一条SQL语句从分析到真正执行的全过程,也就是一般教科书中提到的“词法解析-》语法解析-》逻辑计划-》查询优化-》物理执行计划“,parse_sql主要完成两面两步,词法和语法部分,后者完成后面的三步;另一个函数是mysql_select,完成了计划的生成到执行步骤,也是mysql执行一条SQL语句的关键技术;对上述讲述,语法部分也可能在mysql_select函数中的prepare中,因为暂时未阅读代码,但一般理解,应该是在parse_sql阶段。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值