mysql for 语句执行顺序_MySQL查询语句的执行流程

MySQL可以抽象分为 Server 和存储引擎。

Server 包括 连接器,分析器,优化器,执行器等。

存储引擎负责数据的存储和具体查询。存储引擎是可插拔式的,支持 InnoDB,MyISAM 等多个存储引擎。

连接器

连接器主要的作用是管理数据库的连接,以及连接时的鉴权操作。

客户端连接时,连接器会根据客户端传递的用户名和密码进行判断,如果用户名和密码不对,则会抛出 “Access denied for user”的错误。如果认证通过,会从权限表中查询用户的权限,这个连接的权限都依赖于此时查询到的权限。

使用 show processlist 可以查看MySQL的连接情况。对于空闲连接的处理,连接器会自动断开空闲连接,至于多长时间的空闲连接会自动断开,这个时间由参数wait_timeout控制的,默认值是8小时。

分析器

分析器会对MySQL的语句的语法进行分析,如果格式有问题,或者字段不存在会抛出一条 “You have an error in your SQL syntax” 的错误。

优化器

优化器会执行一些优化相关的操作,例如你的表中如果有多个索引,将会决定使用哪个索引,或者是连接查询中的一些表的连接顺序,做一些优化相关的操作。

执行器

经过了重重关卡,执行器首先会判断当前连接的这个用户是否具有操作该表的权限,如果没有则会抛出 “command denied to user ''root'localhost' for table 'test'“的错误。

如果有权限,打开表,根据表设置的引擎,调用该引擎的接口查询数据,将满足条件的数据作为结果返回给客户端。插入语句会涉及日志,过程和上述有所不同。

数据库的慢查询日志中看到一个rows_examined的字段,表示这个语句执行过程中扫描了多少行。这个值就是在执行器每次调用引擎获取数据行的时候累加的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值