MySQL45讲笔记——架构

MySQL基础架构

MySQL分为Server层和存储引擎层。
Server层包括连接器、查询缓存、分析器、优化器、执行器等。
存储引擎层负责数据的存储和提取,支持多种存储引擎。

Server:

连接器:负责与客户端建立连接,获取权限。
权限:登录成功的同时会获得权限,意味着如果用户登录之后对该用户修改权限,新建连接才会使用新权限,对当前正在使用的用户连接无效。
连接:连接默认断开时间为8小时,由于建立连接比较复杂,建议减少建立连接的动作,尽量使用长连接。
长连接的缺点:MySQL再执行过程中临时内存是管理再内存对象中的,资源只有当连接结束才会释放,长期累积占用内存。建议定期断开长连接或在执行大操作之后执行mysql_reset_connection初始化连接。

查询缓存:缓存查询结果,命中直接返回。
执行过的语句以及结果会以key-value存储在内存中,失效频繁所以不建议使用。静态、配置表可以使用,可以通过query_cache_type设置成按需使用,8.0版本整个模块删除。

分析器:词法分析,语法分析。
词法分析:分析语句中每个词所对应的含义,识别出关键字,字段,表名等。
语法分析:分析SQL是否满足语法,

优化器:优化处理,选择索引、表连接顺序等。

执行器:校验权限,调用引擎接口执行
调用引擎接口
无索引情况下:调用引擎接口取第一条数据判断是否满足,满足存至结果集;调用引擎接口取下一行,重复判断到最后一行;将结果集返回客户端。
有索引情况下:调用引擎接口取满足条件的第一行,循环再取满足条件下的下一行。
rows_examined:表示语句执行过程中扫描了多少行,指的是执行器每次调用引擎接口获取数据行的累加。有些情况下执行器调用一次,再引擎内部扫描多行,这种情况下引擎扫描行数和rows_examined并不完全相同。

在这里插入图片描述

问题:

  1. 如果表T中没有K字段,而当执行select * from T where k = 1,会报不存在字段的错误,是在哪个阶段报出来的?

        分析器阶段。

  1. 为何执行权限校验不在优化器之前做?

        有些时候,SQL语句要操作的表不只是SQL显式指定的那些。比如有个触发器,就只有在执行器阶段才能确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值