如何建设网站并与数据库相连,招聘网站建设人员,广告制作公司的营业成本,软件系统select * from user where id10
当输入这条查询语句之后会发生什么#xff1f; MYSQL逻辑架构图
MYSQL大致可以分为两大部分#xff1a;Server层和存储引擎层
下面来介绍各层中各部分的作用#xff1a;
连接器#xff1a;
客户端请求建立连接#xff0c;在完成TCP连接…select * from user where id10
当输入这条查询语句之后会发生什么 MYSQL逻辑架构图
MYSQL大致可以分为两大部分Server层和存储引擎层
下面来介绍各层中各部分的作用
连接器
客户端请求建立连接在完成TCP连接之后开始输入用户名密码。
连接分为长连接和短连接长连接一经建立如果客户端一直有请求那么连接就不断开。短连接执行很少的几次查询之后就断开连接。
因为建立连接过程比较复杂所以长连接较为简便但是因为SQL语句执行过程中临时使用的内存在连接对象里面如果长连接积累下来资源占用大MYSQL占用的内存就会非常大。
当MYSQL占用的内存达到一定程度之后MYSQL就被系统杀死从现象看就是MYSQL重启了。
解决这个问题的办法
1.定期断开长连接
2.初始化连接将连接初始化连接恢复到刚刚创建完的时候
查询缓存
连接建立完成之后MYSQL获得查询请求先在缓存里查看如果缓存中有这条语句就获取他返回。
缓存中一般是keyvalue的格式key是你所输入的SQL语句。value是SQL执行完成之后的结果
但是一般不建议用缓存因为如果某个表有更新操作那么关于这个表的所有缓存都要清空。
MSQL也很人性化的提供给用户自由使用缓存这个功能可以先设置不适用缓存需要使用的时候
使用select SQL_CACHE * from user where ID10;
分析器
缓存中查不到之后开始进入分析器先做词法分析分析器获取到一些字符串与空格即用户输入的SQL语句识别出每个字符串代表什么把select识别为select把ID识别为列ID
之后开始语法分析看是不是有语法错误比如 输入 elect * from user where ID10会报错
优化器
分析器判断SQL语句无误后进入优化器优化器来决定需要使用哪个索引各个表的连接顺序
执行器
优化器优化之后执行器开始执行这个SQL语句开始执行之前先判断是不是有权限
如果用户没有对这个表的查询操作就返回没有权限。
如果有权限就去使用引擎提供的接口。
无索引访问调用引擎接口取这个表的第一行判断是不是符合ID10不是则跳过然后进入第二行是则将结果保存在结果集中进入第二行。
有索引访问调用索引中满足要求的第一行满足要求的第二行 存储引擎一般如果不指定存储引擎则默认是InnoDB引擎