深入剖析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)系统已成为医疗机构信息化建设的核心组成部分。电子病历不仅承载着患者的诊疗信息,更是医疗决策、质量控制、科研分析以及医疗管理的重要依据。根据国家卫生健康委发布的《电…

如何借助 AI 提升工作效率

AI让工作更高效 引言 你是否曾在忙碌的工作中感到力不从心,无法高效完成任务?在如今这个信息爆炸的时代,时间似乎总是不够用。而幸运的是,人工智能(AI)的崛起让这一切发生了变化。AI的应用正日益深入我们…

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

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

NextCloud服务安装与配置教程

NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…

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 基…

Prometheus 专栏 —— Prometheus安装、配置

配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率,默认为 1minevaluation_interval: 评估告警规则的频率,默认为 1minscrape_timeout: 抓取目标指标数据拉取超时,默认为 10s,如果出现 context deadline exceeded 错误时需要在特定的 job 下配置该字…

基于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…

MySQL实用SQL示例

创建数据库 CREATE DATABASE zq-cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;创建表 CREATE TABLE regulatory_firm_category (category_id int NOT NULL AUTO_INCREMENT COMMENT 分类id,自增主键,parent_id int NOT NULL COMMENT 父级id,category_…

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

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

数据结构与算法之动态规划: LeetCode 674. 最长连续递增序列 (Ts版)

最长连续递增序列 https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/ 描述 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度连续递增的子序列 可以由两个下标 l 和 r(l …

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) 注意力机制可以揭示输入数据中各个部分之间的关系&#…

【centos8 镜像修改】centos8 镜像修改阿里云

要将 CentOS 8 的镜像源修改为阿里云镜像,你需要编辑 /etc/yum.repos.d/ 目录下的 .repo 文件。以下是具体的步骤: 备份原始的 .repo 文件: 在编辑之前,建议备份原始的 .repo 文件,以便在出现问题时可以恢复。 sudo cp…

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

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

WebRTC的三大线程

WebRTC中的三个主要线程: signaling_thread,信号线程:用于与应用层交互worker_thread,工作线程(最核心):负责内部逻辑处理network_thread,网络线程:负责网络数据包的收发…

25考研总结

11408确实难,25英一直接单科斩杀😭 对过去这一年多备考的经历进行复盘,以及考试期间出现的问题进行思考。 考408的人,政治英语都不能拖到最后,408会惩罚每一个偷懒的人! 政治 之所以把政治写在最开始&am…