MYSQL--一条SQL查询语句是如何执行的?

select * from user where id=10

当输入这条查询语句之后会发生什么?

                                               MYSQL逻辑架构图

MYSQL大致可以分为两大部分:Server层和存储引擎层

下面来介绍各层中各部分的作用:

连接器:

客户端请求建立连接,在完成TCP连接之后,开始输入用户名,密码。

连接分为长连接和短连接,长连接一经建立,如果客户端一直有请求,那么连接就不断开。短连接执行很少的几次查询之后就断开连接。

因为建立连接过程比较复杂,所以长连接较为简便,但是因为SQL语句执行过程中临时使用的内存在连接对象里面,如果长连接积累下来,资源占用大,MYSQL占用的内存就会非常大。

当MYSQL占用的内存达到一定程度之后,MYSQL就被系统杀死,从现象看就是MYSQL重启了。

解决这个问题的办法:

1.定期断开长连接

2.初始化连接,将连接初始化,连接恢复到刚刚创建完的时候

查询缓存:

连接建立完成之后,MYSQL获得查询请求,先在缓存里查看,如果缓存中有这条语句,就获取他返回。

缓存中一般是(key,value)的格式,key是你所输入的SQL语句。value是SQL执行完成之后的结果

但是一般不建议用缓存,因为如果某个表有更新操作,那么关于这个表的所有缓存都要清空。

MSQL也很人性化的提供给用户自由使用缓存这个功能,可以先设置不适用缓存,需要使用的时候

使用select SQL_CACHE * from user where ID=10;

分析器:

缓存中查不到之后,开始进入分析器,先做词法分析,分析器获取到一些字符串与空格,即用户输入的SQL语句,识别出每个字符串代表什么,把select识别为select,把ID识别为列ID

之后开始语法分析,看是不是有语法错误,比如 输入 elect * from user where ID=10会报错

优化器:

分析器判断SQL语句无误后,进入优化器,,优化器来决定需要使用哪个索引,各个表的连接顺序

执行器:

优化器优化之后,执行器开始执行这个SQL语句,开始执行之前,先判断是不是有权限

如果用户没有对这个表的查询操作,就返回没有权限。

如果有权限,就去使用引擎提供的接口。

无索引访问:调用引擎接口取这个表的第一行,判断是不是符合ID=10,不是则跳过然后进入第二行,是则将结果保存在结果集中进入第二行。

有索引访问:调用索引中满足要求的第一行,满足要求的第二行

 

存储引擎:一般如果不指定存储引擎,则默认是InnoDB引擎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值