第一章、MySQL基础架构

知其然知其所以然,五万字讲解MySQL,仅仅只是入门,关于MySQL日志和InnoDB这一块,就可以弄两本书了。本系列仅讲解开发中需要的一些相关知识点,不至于那么迷茫。主要涉及的有MySQL基础架构,MySQL日志详解,InnoDB引擎详解,索引,事务,MySQL锁

第一章、MySQL基础架构
第二章、buffer pool缓冲池详解
第三章、MySQL日志详解
第四章、Hash表和B+Tree详解
第五章、全面解析MySQL索引
第六章、InnoDB引擎详解
第七章、MySQL事务的脏读,不可重复读,幻读
第八章、关于MySQL各种锁的详解


前言

我们都知道,Java程序中,只需要使用提供好的方法,就能够直接对数据库进行CRUD操作,实际上这中间过程中,经历过什么,我们是不用理会的。但是对于一个博学的程序员来说,了解其原理,才是你能够胜于别人的资本。

脑图

image-20201105220708580

一条SQL查询语句,经历了什么?

Java程序(客户端)发起数据库连接的时候,都要先校验账号密码(连接层),判断账号密码是否正确,是否具备操作权限等;之后将查询语句传递给服务层,服务层会对该查询语句做解析、优化、执行等操作;然后将优化后的查询语句,传递给引擎层,引擎层负责数据的提取,通过API与存储层进行通信,获取数据。这是一个比较粗略的讲解,先有个大概印象。

网上很多张图,这里贴一张楼主觉得不错的图

image-20201104232001155
  • 连接层:客户端连接服务,验证用户身份,主要完成一些类似连接处理,授权认证,安全校验的处理。5.5以后引入了线程池的概念,为通过认证安全接入的客户端提供线程。该层可以实现基于SSL的安全链接,服务器会为安全接入的每个客户端验证它所具有的操作权限。
  • 服务层:完成大部分的核心服务功能,查询解析,分析,优化,缓存,所有内建函数,触发器,存储过程,视图等。
  • 引擎层负责Mysql中数据的存储和提取数据,服务器通过API与存储引擎进行通信,存储引擎不会去解析SQL(innoDB除外,会解析外键定义,因为服务器没有提供这个功能)
  • 存储层将数据存储到机器上的文件系统(磁盘)上,并且完成与存储引擎的交互。

上面已经讲解了一条SQL语句在MySQL中怎么操作的,这里再细讲一下
image-20201104232717772
一条SQL语句到达连接器时,先查询缓存看看,看之前是否执行过。如果是,直接返回;如果不是,则通过分析器、优化器、执行器、最后到达引擎层,由引擎层调用存储层操作数据并返回

  • 查询缓存:判断Query Cache是否存在查询的数据,如果存在即返回;不存在执行后续操作(注:MySQL 8.0版本以后移除,因为该功能不太实用)
  • 分析器:对SQL进行词法分析和语法分析,就是分析这条语句要干什么,语法是否正确
  • 优化器:按照 MySQL 认为最优的方案去执行,也就是会重新定义这条SQL语句
  • 执行器:执行前看用户是否具有执行权限,有,使用引擎提供的接口,操作引擎返回结果
  • 引擎层:获取数据返回(如果开启缓存,会缓存查询结果)

查询缓存

建立连接之后,执行逻辑到达第二步:查询缓存。

在Mysql8.0版本以前,Mysql拿到一条select语句,会先查询缓存看看,之前是否执行过该语句,如果之前执行过该语句,会以Key-Value的形式,被直接缓存在内存中,Key是查询的语句,Value是查询语句的结果。如果查询语句不变的情况下,命中缓存,会直接返回value。如果语句不在查询缓存中,就会继续后面的执行阶段。执行完成后,执行结果会被存入查询缓存中。

大多数情况建议不要使用查询缓存,为什么?

查询缓存的失效非常频繁,如果对一个表的更新,那么,这个表的所有查询缓存都会清空。因此有可能存了大量的缓存数据,因为一个更新全清空了。对于更新压力大的数据库来说,查询缓存反而是一种压力。

除非业务是处理一张系统配置表,更新表的操作少,这种才比较适合查询缓存

查询缓存需要设置的参数

# 0(OFF):关闭 Query Cache 功能,任何情况下都不会使用 Query Cache;
# 1(ON):开启 Query Cache 功能,但是当SELECT语句中使用SQL_NO_CACHE提示后,将不使用Query Cache;
# 2(DEMAND):开启Query Cache 功能,但是只有当SELECT语句中使用了SQL_CACHE 提示后,才使用Query Cache。
# 查询缓存类型,是否打开缓存,默认SQL语句不使用查询缓存
query_cache_type: DEMAND

query_cache_size: 缓存使用的总内存空间大小

总结

粗略讲解了关于MySQL的基础架构已经各个层之间的作用,看完之后不至于一脸懵。脑图已经画了,后面大概每一章都会贴一篇,需要的话,这边也会相应的贴出来。文章作为交流和笔记记录。有不对的欢迎指正,共同进步。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值