当前位置: 首页 > news >正文

【数据库】数据库基础架构

数据库架构

数据库对于后端程序员来说是每天都需要打交道的系统,因此了解并掌握MySQL底层原理是必须的。

基础架构图

MySQL内部分为两层,一个是Server层,另一个是存储引擎层,而我们常用的就是MyISAM、InnoDB,主要负责数据的读取和存储。
在这里插入图片描述

连接器

连接器其实比较好理解,我们编写的程序Java、go 通过客户端程序去连接,需要提供ip+端口,账号,密码。通过网络TCP建立网络通信后,连接器授信根据提供的账号密码进行验证是否存在,如果不存在的话。
在这里插入图片描述

1045 - Access denied for user 'root1'@'localhost' (using password: YES)

会抛出以上异常,代表账号密码不正确。如果账号密码连接正确,就会到权限表查看对应用户的权限,依赖此时读取到的权限。
连接成功后,如果没有操作默认有8h的连接时间,超过这个时间后就会连接失效。默认就是8小时/。。在这里插入图片描述
创建连接这种动作是比较耗费系统资源的,所以在实际的应用中,我们会创建长连接来避免频繁的短连接操作。

查询缓存

如果成功创建连接之后,那么就会先到缓存中查询,是否存在数据,有的话直接返回。具体的结构是 key,value,key对应查询SQL语句,value对应数据结果。如果没有的话,直接执行后续流程,拿到数据,将数据放到缓存中。
什么场景比较适合查询缓存呢
其实对于大多数的应用老说,都不建议开启查询缓存,因为只要存在对表数据以及结构操作,那么缓存数据就会失效。缓存命中率会比较低,所以,一般不建议开启。除非是那种静态配置表_config之类的,可以使用。

query_cache_type = DEMAND 

以上配置不会走查询缓存,
在这里插入图片描述
不过需要注意的是,mysql 8.0之后不在提供查询缓存。

分析器

如果从查询缓存中获取不到数据,那么就直接开始执行SQL,但是需要先解析SQL,先词法分析,获取这个SQL要做什么,然后语法分析,是否符合SQL规范。如果不符合会抛出
在这里插入图片描述
一般语法错误会提示第一个出现错误的位置,所以你要关注的是紧接“use near”的内容。
在这里插入图片描述

优化器

分析器可以获取到要做什么,到优化器这里就是觉得表里有多个索引的时候,应该选择哪个,或者lefo join的时候应该先选择哪个表的数据进行执行。到这里语句的执行方案就确定下来。

执行器

Mysql到这里通过分析器知道要做什么,优化器知道如何去做,
会根据之前定义的存储引擎,调用存储引擎接口执行SQL,如果查询的是name='xx’的数据,没有索引的前提下,会全标扫描一行行取出来,符合的数据放到res中,最后返回结果,所以rows_examined!=存储引擎扫描的行数,可能存在,执行期调用了一次,但是存储引擎执行了多行。

存储引擎

目前主流的都是InnoDB存储引擎,InnoDB内存有page页存储数据的,一页=64KB

执行流程

在这里插入图片描述

资料来源:极客时间<mysql 45讲>

http://www.lryc.cn/news/38737.html

相关文章:

  • English Learning - L2 语音作业打卡 双元音 [ɔɪ] [ɪə] Day16 2023.3.8 周三
  • C++语法规则4(C++面向对象)
  • 【Spring 深入学习】AOP的前世今生之后续
  • 软考高项——配置管理
  • 网站SEO优化,网站TDK三大标签SEO优化,LOGO SEO优化
  • select查询语句
  • 没有对象感,沟通太费劲
  • 智能优化算法之遗传算法
  • 【rabbitmq 实现延迟消息-插件版本安装(docker环境)】
  • 【大数据】HDFS管理员 HaAdmin 集群高可用命令详细使用说明
  • 京区航天研究所 哪些比较好的研究所?
  • Nacos配置拉取及配置动态刷新原理【源码阅读】
  • 第十届省赛——9等差数列(集合做法)
  • 《数据分析-JiMuReport03》JiMuReport报表设计入门介绍-新建报表
  • 从功能测试进阶自动化测试,爆肝7天整理出这一份超全学习指南【附网盘资源】
  • CNN神经网络——手写体识别
  • python调试模块ipdb
  • 【数据库】聊聊MySQL的日志,binlog、undo log、redo log
  • aws dynamodb java低等级api和高级客户端api的使用
  • Kafka中那些巧妙的设计
  • 《JavaEE》进程和线程的区别和联系
  • Matlab生成sinc信号
  • 进程与线程区别与联系
  • 使用vbscript.regexp实现VBA代码格式化
  • 选择结构习题:百分值转换成其相应的等级
  • c# 源生成器
  • [N1CTF 2018]eating_cms1
  • 数据结构与算法基础(王卓)(15):KMP算法详解(含速成套路和详细思路剖析)
  • 【互联网架构】聊一聊所谓的“跨语言、跨平台“
  • 1.JVM常识之 类加载器