MySQL学习笔记-MySQL的逻辑架构

SQL的语句查询流程

MySQL逻辑架构图

MySQL分为Server层与存储引擎层

Server层

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

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

存储引擎

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

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

连接器

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

mysql -h$ip  -P$port  -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验证权限
  • 有权限,打开表继续执行,打开表时使用的是存储引擎提供的接口
posted @ 2020-10-02 13:20  大梦方觉寺  阅读(135)  评论(0)    收藏  举报