一条SQL查询语句是如何执行的(通俗易懂版)

在这里插入图片描述
一条查询语句是如何执行的

  1. 一条SQL语句的执行流程是通过连接器验证账号、密码、权限,连接到MySQL
  2. 然后到缓存中查询以前有没有缓存过这条数据(因为数据库每次会将查询后的数据以key-value的形式存到缓冲中,key为查询语句,value为查询结果;但是每次在该表执行完更新操作后会清除该表的缓存,来保证数据的一致性。此外,查询缓存有一个缺点,就是在经常做更新操作的表中,查询语句的缓存命中率很低,而且在删除缓存的过程中会加锁,此时有一条语句进来进行查询操作,此时就会报出waiting for qurey cache lock错误,等待缓存清除完成。这里有一个解决方案,就是可以使用set @global_query_cache_type = 0,禁用查询缓存,0为禁用,1为开启,2为需要语句显式声明查询缓存,比如select SQL_cache * from t1就是一条显式声明查询缓存)
  3. 若缓存中没有数据,分析器就会进行词法分析和语句分析。词法分析主要是根据SQL语句,分析出操作哪张表的哪些字段以及操作条件;而语法分析主要是做SQL语法的分析,看语句有没有写错。
  4. 分析成功后,就会到优化器,优化器主要是根据SQL语句,看使用哪个索引或者选择连表顺序。
  5. MySQL 通过分析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,开始执行语句。开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值