mysql逻辑关联_MySQL学习笔记-MySQL的逻辑架构

SQL的语句查询流程在这里插入图片描述
MySQL分为Server层与存储引擎层

Server层

1.连接器 ,查询缓存,分析器,优化器和执行器等,以及所有的内置函数(如日期,时间,数字加密函数等)。

2.所有的跨存储引擎功能都在这一层实现,如存储过程,触发器,视图等

存储引擎

1.负责数据的存储于提取

2.MySQL5.5.5版本后默认的存储引擎为InnoDB

连接器

负责与客户端建立连接,获取权限,维持和管理连接

mysql -h i p − P ip -P ipPport -u$user -p

长链接与短连接

长链接

连接成功后,客户端持续有链接请求,则一直使用同一连接

短连接

每次执行完很少的查询都断开连接,下次查询再建立连接

使用长链接可能会发生的问题

占内存

MySQL执行过程中临时使用的内存是管理在连接对象了吗

这些资源在连接断开后才释放,导致内存太卡,被系统强行杀掉,会导致MySQL异常重启

解决方法

定期断开长连接

执行mysql_reset_connection来初始化资源

查询缓存

一个查询请求会先到查询缓存里

以key-value对的形式,被直接缓存到内存里

key是查询的语句,value是查询的后果

如果查询缓存里没有寻找的数据,则继续后面的执行步骤,查询完后,结果会存放在查询缓存里

查询缓存的缺点

查询缓存的失效非常频繁,有时一个表的更新,此表上所有的缓存都会清空

对更新压力大的数据库来说,查询缓存的命中率非常低

一张静态表的查询才适合查询缓存

选择性使用查询缓存

将参数query_cache_type设置为DEMAND,默认SQL语句都不使用查询缓存

对于使用查询缓存的语句,用SQL_CACHE指定

select SQL_CACHE * from T where ID=10

MySQL8.0版本开始没有查询缓存功能

分析器

词法分析

识别SQL语句里面的字符串分别是什么,代表什么

例如:select关键字识别出来,字符串’T’识别成’表名T‘

语法分析

根据语法规则,判断输入的SQL语句是否满足MySQL语法

优化器

当表里有多个索引时,优化器决定使用哪个索引

一个语句有多表关联(join)时,决定各个表的连接顺序

例如

mysql> select * from t1 join t2 using(ID) where t1.c=10 and t2.d=20;

1.即可以先从表t1里取出c=10的记录,再根据ID之关联到t2,判断里面d的值是否等于20

2.也可以从t2里取出d=20的记录ID值,再根据ID值关联到t1,在判断c值是否等于10

执行器

首先判断对这个表有没有查询的权限,没有就报错

如果命中查询缓存,会在查询结果返回时,做权限验证。查询会在优化器之前调用precheck验证权限

有权限,打开表继续执行,打开表时使用的是存储引擎提供的接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值