深入剖析MySQL数据库架构:核心组件、存储引擎与优化策略(一)

sql语句分为两大类:查询(select)、增删改----修改(update)

select语句的执行流程

执行sql语句的流程:连接数据库、缓存查询、解析器、优化器、执行器、存储引擎操作数据

客户端:图形界面工具,cmd窗口,Java代码。

先在缓存中查,MySQL缓存中的key是sql语句,sql语句多加一个空格之前的缓存就不能使用了。一般不使用mysql缓存,一般使用mybatis的一级缓存、二级缓存。

连接层

当mysql服务器启动(mysql服务器就是一个进程),等待客户端连接,每一个客户的连接请求,服务器都会创建一个新的线程处理(如果是线程池的话,则是分配一个空的线程),每个线程都是独立的,拥有各自的内存处理空间。

使用客户端(程序、客户端图形界面工具)访问mysql数据,第一步是连接上mysql的服务器。

1) 协议问题

连接所使用的协议。大多数是TCP协议,也可以使用其他的协议,例如:unix socket(了解即可)

2) 连接问题

连接可以是长连接也可以是短连接,短连接的特点是连接后立即关闭,比较消耗资源。长连接使用后不会立即释放,可以给其他的客户端继续使用,所以mysql大多数都是使用的长连接。

3) 同步问题

Mysql支持同步和异步的方式,大多数使用的是同步的方式,异步会给编程带来复杂性。执行完一条SQL语句再执行下一句SQL语句-----同步

同步:当一个任务未完成,下一个任务无法开始

异步:异步任务可以独立执行

4) 通过命令查看mysql服务器端连接相关的默认配置

show global status like'Thread%';

(查看mysql服务器端目前所创建立的连接  mysql属于一个进程  每一个连接为一个线程)

连接在指定超时的时间后,会更新销毁。利用如下的命令可以查看。

-- 非交互式超时时间,例如:JDBC程序方式连接

show GLOBAL VARIABLES like'wait_timeout';

-- 交互式超时时间,如客户端工具

show GLOBAL VARIABLES like'interactive_timeout';

Mysql数据库默认支持的并发连接数量,默认值是151,是可以修改的。

-- 显示默认的最大并发连接数(最大并发连接数指的是数据库能够同时连接的人数)

show VARIABLES like'max_connections';

特别注意:

加了 Global  的命令是查看全局的参数,没有加是查看当前会话级别的参数。如果想设置全局的,需要修改mysql的配置文件。Linux系统下修改 /etc/my.cnf配置文件,windows下修改my.ini的配置文件。

缓存层

Mysql数据库中支持缓存,在5.7的版本中默认是关闭状态(在8的版本中已经去掉了mysql的缓存)。可以通过查看缓存相关的命令查看。

-- 查询mysql缓存

show VARIABLES like'query_cache%';

在mysql的配置文件my.ini或my.cnf中也可以找到缓存相关的配置,默认都是关闭的。

query_cache_size=0

以上信息是默认配置,其注释意思是说,MYSQL的查询缓存用于缓存select查询结果,并在下次接收到同样的查询请求时,不再执行实际查询处理而直接返回结果,有这样的查询缓存能提高查询的速度,使查询性能得到优化,前提条件是你有大量的相同或相似的查询,而很少改变表里的数据,否则没有必要使用此功能。Sql语句的更改(简单到修改了一个空格),都不会查询之前的缓存。表中完成了新增,修改数据缓存也会失效。

如果想使用缓存,具体的配置方法:

1.将query_cache_size设置为具体的大小,具体大小是多少取决于查询的实际情况,但最好设置为1024的倍数,参考值32M。

2.增加一行:query_cache_type=1

query_cache_type参数用于控制缓存的类型,注意这个值不能随便设置,必须设置为数字,可选项目以及说明如下:

如果设置为0,那么可以说,你的缓存根本就没有用,相当于禁用了。

如果设置为1,将会缓存所有的结果,除非你的select语句使用SQL_NO_CACHE禁用了查询缓存。

如果设置为2,则只缓存在select语句中通过SQL_CACHE指定需要缓存的查询

解析层

解析器解析编写的sql语句,根据关键字运算符等生成对应的树形结构。

词法和语法解析:

解析sql语句,生成树形结构。

解析树:

语义解析:判断表名或者字段是否存在,使用的别名是否正确。

例如:select * from xxx  xxx表如果不存在,sql语句也会报错。

优化器

编写了一条sql语句,它是有多种执行路径的,只不过最终的执行结果是相同的。多种路径是由哪个组件来生成的,最终选择哪一个路径来执行该sql呢。

Mysql架构中使用优化器来根据解析树生成多条执行路径(执行计划),最终会选择一个执行计划去执行。

执行计划生成后,会选择优化器认为最优的执行计划进行执行。根据cost(成本)方式选择出来的优化器。

优化器还会对sql语句进行优化,例如在进行join多表查询的时候,哪张表先查,那张表后查询会进行优化,当一条sql执行可以使用几个索引,优化器也会选择出一个成本最优的索引使用。像sql语句中存在 1=1 的时候,也是可以把 1=1优化掉的。

如何去查看优化器生成的执行计划,加入explain去执行sql语句即可。

如果想查看更详细的信息,可以显示json的数据格式。

EXPLAIN FORMAT=JSON select* from t_person

Select * from user;

Select * from user where1=1;

执行器

存储器

数据存储在本地磁盘(MySQL的安装目录中Data文件夹中)

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取。MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的。每一种存储引擎都有它的优势和劣势。

可以使用 show engines; 命令来查看当前数据库所支持的所有的存储引擎。

SHOW VARIABLES LIKE 'default_storage_engine%';-------查看默认存储引擎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891461.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子病历四级视角下SQL语句的优化策略与实践用例研究

一、引言 1.1 研究背景与意义 在当今数智化医疗时代,电子病历(Electronic Medical Record,EMR)系统已成为医疗机构信息化建设的核心组成部分。电子病历不仅承载着患者的诊疗信息,更是医疗决策、质量控制、科研分析以及医疗管理的重要依据。根据国家卫生健康委发布的《电…

C++简明教程(14)动态库和静态库的内存共享机制

总结,动态库共享内存,静态库独占一份内存。

Elasticsearch向量检索需要的数据集以及768维向量生成

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang) Elasticsearch检索之三:官方推荐方案search_after…

CSS2笔记

一、CSS基础 1.CSS简介 2.CSS的编写位置 2.1 行内样式 2.2 内部样式 2.3 外部样式 3.样式表的优先级 4.CSS语法规范 5.CSS代码风格 二、CSS选择器 1.CSS基本选择器 通配选择器元素选择器类选择器id选择器 1.1 通配选择器 1.2 元素选择器 1.3 类选择器 1.4 ID选择器 1.5 基…

基于AT89C51单片机的可暂停八路抢答器设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90196607?spm1001.2014.3001.5503 C15 部分参考设计如下: 摘要 随着社会进步和科技发展,电子设备在各类活动中的应用日益普遍&#xff0c…

【python】unittest单元测试

文章目录 基本使用不同启动方式的区别 基本使用 下面是根据文档写的一个demo,主要的内容基本都包含了,使用时导入自己的业务类测试类中的方法就行。 import unittest# 测试类不强制test开头,仅作为规范。但必须继承unittest.TestCase class…

从0入门自主空中机器人-4-【PX4与Gazebo入门】

前言: 从上一篇的文章 从0入门自主空中机器人-3-【环境与常用软件安装】 | MGodmonkeyの世界 中我们的机载电脑已经安装了系统和常用的软件,这一篇文章中我们入门一下无人机常用的开源飞控PX4,以及ROS中无人机的仿真 1. PX4的安装 1.1 PX4固件代码的下载…

SqlSession的线程安全问题源码分析

🎮 作者主页:点击 🎁 完整专栏和代码:点击 🏡 博客主页:点击 文章目录 SqlSession 是线程安全的吗?为什么说是线程不安全的?事务管理问题 数据库连接的共享问题 一级缓存线程安全问题…

Unity Mesh生成Cube

1. 配置一个Cube的每个面的数据 一共是6个面,每个面包含的数据包括4个顶点的相对顶点坐标(Cube的中心为原点),法线方向,UV坐标,顶点渲染顺序,以及这个面用到的材质,因为这里是Top&am…

小程序组件 —— 22 组件案例 - 轮播区域绘制

这一节我们实现轮播图最外层的盒子,也就是把轮播图的最外层搭好,先不给轮播图添加图片,因为图片属于新的组件,组件里面有一些知识点,需要单独分开讲; 回顾一下,在进行传统网页开发时&#xff0…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 3.1.2 基于注意力的解释(Attention-Based Explanation) 注意力机制可以揭示输入数据中各个部分之间的关系&#…

git reset --hard(重置到当前提交,所有未提交的更改都会被永久丢弃)

git reset --hard 是一个强大的命令,它会将你的工作目录、暂存区和当前分支的 HEAD 指针重置到指定的提交状态,所有未提交的更改都会被永久丢弃。因此,使用这个命令时需要非常小心。 基本用法 重置到当前提交(丢弃所有未提交的更…

单元测试入门和mockup

Java 新手入门:Java单元测试利器,Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式,学一下单测思路 这个没有动态代理,所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…

智能化人才招聘系统是怎样的?

随着企业规模的扩大和业务范围的拓展,人才招聘成为了企业发展的关键环节。然而,市面上的人才招聘系统琳琅满目,质量参差不齐,许多企业发现,并非所有系统都能满足他们的需求,特别是智能化的需求。今天&#…

SpringBoot 实现登录功能

目录 下发JWT 令牌依赖文件令牌生成令牌验证 统一验证技术过滤器 Filter快速使用实现登录校验 拦截器 Interceptor快速使用实现登录校验 下发JWT 令牌 全称: JSON Web Token 官网: https://jwt.io/ 以JSON 的数据格式安全传输信息,利用 base64 进行编…

Disruptor 有哪些典型的使用场景?

大家好,我是君哥。 Disruptor 是一款高性能的内存有界队列,它通过内存预分配、无锁并发、解决伪共享问题、使用 RingBuffer 取代阻塞队列等措施来大幅提升队列性能。 但开发者们往往对它的使用场景不太了解,到底应该在哪些场景使用呢&#…

[MySQL报错]关于发生net start mysql 服务无法启动,服务没有报告任何错误的五种解决方案。

咋直接进入主题。 我遇到的问题是net start mysql 服务无法启动,服务没有报告任何错误 其问题出在哪里呢 一.ini文件配置问题 在于你没有给你下载好的mysql文件中配置.ini文件。 该如何配置呢。那就是先在文件夹中创建一个文本文件,把下面内容复制进去…

HTML5新特性|01 音频视频

音频 1、Audio (音频) HTML5提供了播放音频文件的标准 2、control(控制器) control 属性供添加播放、暂停和音量控件 3、标签: <audio> 定义声音 <source> 规定多媒体资源,可以是多个<!DOCTYPE html> <html lang"en"> <head><…

goView二开低代码平台1.0

官网文档地址&#xff1a;GoView 说明文档 | 低代码数据可视化开发平台 简介&#xff1a;GoView 是一个拖拽式低代码数据可视化开发平台&#xff0c;通过拖拽创建数据大屏&#xff0c;使用Vue3框架&#xff0c;Ts语言和NaiveUI组件库创建的开源项目。安装步骤和地址文档里都有…

2024年中国新能源汽车用车发展怎么样 PaperGPT(一)

概述 在国家政策的强力扶持下&#xff0c;2024年中国新能源汽车市场迎来了新的发展机遇。本文将基于《中国新能源汽车用车报告&#xff08;2024年&#xff09;》的数据&#xff0c;对新能源汽车的市场发展和用车趋势概述。 新能源汽车市场发展 政策推动&#xff1a;国家和地…