sql语句是如何执行的
2018-12-22 本文已影响0人
苏康申
MySQL执行流程
1,连接
1,连接
连接管理模块,接收请求;连接进程和用户模块,通过,连接线程和客户端对接,在完成TCP握手后,连接器开始认证登录的身份,然后根据输入的用户名与密码查询拥有的权限,之后这个连接里面的权限判断逻辑都依赖此时读到的所有权限
注意 一个用户成功建立连接后,即使你用管理员账号对这个用户的权限做了修改,也不会影响已经存在连接的权限。修改完成后,只有再新建的连接才会使用新的权限设置。
连接完成后,如果你没有后续的动作,这个连接就处于空闲状态,你可以在 show processlist 命令中看到它。文本中这个图是 show processlist 的结果,其中的 Command 列显示为“Sleep”的这一行,就表示现在系统里面有一个空闲连接。
2,查询
查询缓存 Query Cache
分析器,内建解析树,对其语法检查,先from,再on,再join,再where......;检查权限,生成新的解析树,语义检查(没有字段k在这里)等
优化器,将前面解析树转换成执行计划,并进行评估最优
执行器,获取锁,打开表,通过meta数据,获取数据
3,返回结果
返回给连接进程和用户模块,然后清理,重新等待新的连接