mysql 判断临时表存在_mysql基础架构

6126af44bc81fa8f2e6c2f5653134c78.png

如图,分为server与存储引擎两层。

从图中不难看出,不同的存储引擎共用一个 Server 层,也就是从连接器到执行器的部分。

如果不指定存储引擎默认使用innodb。

连接器

负责与客户端建立连接,进行用户名密码认证,认证后获得权限。对权限的修改只会在重新登陆后生效。

连接长时间不使用会自动断开。

长连接可以减少连接创建销毁的开销,但是mysql执行过程中临时使用的内存会越来越多,导致占满内存,可能会被系统杀掉(OOM)。

解决方法:

1、定期断开长连接

2、mysql_reset_connection

查询缓存

执行相同的sql会使用缓存,但是对表的修改会使缓存失效(不好用)。mysql 8.0移除

分析器

词法分析->语法分析

优化器

1、多个索引决定用哪个索引

2、多表关联(join)决定表的连接顺序

执行器

查询之前先判断权限

mysql> select * from T where ID=10;

执行过程(ID不是索引):

1、调用 InnoDB 引擎接口取这个表的第一行,判断 ID 值是不是 10,如果不是则跳过,如果是则将这行存在结果集中;

2、调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。

3、执行器将上述遍历过程中所有满足条件的行组成的记录集作为结果集返回给客户端。

如果有索引,调用”获取满足条件的第一行“接口和"满足条件的下一行接口"。

课后思考:sql中使用了不存在的列,在哪一步报错?

答案:分析器

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值