mysql | 查询数据的过程|优化-->索引 |存储引擎

查询的过程
首先确认mysql 服务器是否启动 systemctl mysqld status
登录连接 mysql -h i p − u ip -u ipuuser -p (-h 指定服务器ip -u 指定用户名 -p 指定密码)
mysql 数据包 经过抓包分析(mysql包其实就是基于tcp协议 3306端口) 传输采用mysql 协议,数据也是加密了的

所以这里也是先有三次握手、然后执行sql 再是四次挥手
上面的是短连接,下面就来讲一下长连接
三次握手
执行sql
执行sql
执行sql
……
四次挥手

当连接上了,可以查看有多少个客户端已经连接 show processlist;
可以查看 客户端最大连接数 show variables like ‘max_connections’;
连接的客户端状态有的是sleep、有的是query
可以查看 最长空闲连接时间 show variables like ‘wait_timeout’;
当然也可以手动断开空闲连接, kill connection +id;

接着查询缓存,注意mysql8.0以前的存储引擎采用的是innodb,缓存采用的是buffer pool
当要查询的结果,缓存中匹配上了,就直接返回结果

注意,budder pool 中采用的是key–value 形式进行缓存
但是当要查询的的表有更新操作,那么这个表的查询缓存就会被清空。
所以,这样一个场景,混存中有上一次查询的记录,但是又来了一个对这张表的另一个更改操作,导致这张表中的缓存全都清空,这时候再来一次查询就要从磁盘中查找了。

接着进行的是解析
解析,会根据关键词拆分,把语句拆成一个b+树
在这里插入图片描述
需要注意的是,sql 语句的语法检测,不是在这部份进行的,而是在下面的部份
执行sql
sql执行分为三步
预处理阶段(这个阶段会进行语法检测)、
优化阶段(比如有多个索引方式,优化器会将sql的方案确定下来,可以使用 explain + 执行的语句;
key 展示的就是用哪个索引。
执行阶段,执行sql语句。

讲一下,索引
索引的结构都有哪几种:
哈希索引:把索引当成key 然后去查找,速度很快,但是一个键只能对应一个值无法像树那样散列的分布
B+树:多路平衡二叉树,每个节点可以包含多个关键字和指向子节点的指针,内部节点不存储数据,只存储索引信息和指向子节点的指针,叶子节点有序(关键字都是有序排列在列子节点中,叶子节点之间通过指针相连形成链表、由于是高度平衡,所以查询的时间复杂度趋于logn

再讲讲索引的类型
普通索引,在建表的时候添加 index idex_name (name) -----解释:idex_name 为索引名、name 为字段名
或者在建完表以后,create index idex_name on student(name); -----解释: student 为表名 name 是创建该字段为索引
删除索引
srop index idex_name on student;
除了普通索引,还有主键索引,注意表中的主键默认就是采用了主键索引,换句话说,这个操作是多余的?
还有组合索引,组合索引要求组合的字段不为null,而且组合的结果必须唯一,注意组合索引还支持最左前缀原则,什么意思呢,就是当你创建了组合索引idex_name_student_id(name student_id),然后而是采用 name 去筛选,默认使用的就是组合索引idex_name_student_id,如果用student_id 去筛选,不会用组合索引。
create index idex_name_student_id on student(name, student_id);
同样执行的时候 最前面添加 explain 去查看这条语句执行的规则
当然还有 全文索引
讲了索引,再继续讲执行语句
在innodb 索引引擎中,(5.7—8)? (5.7之前是MyISAM ?)
因为innodb 是支持事务的,特点就是原子性,要么不错,要做就成功
执行sql,在buffer poll 缓存中找,如果没有便从磁盘中读取,这个io开销很大的,然后这个时候会会有undo日志工作,用于记录更新当前的sql,方便回滚操作。

如果是执行更改 innodb 会在 buffer pool 执行 然后将 日志写入Redo log buffer 中,再将日志刷入磁盘redo磁盘文件

在这里插入图片描述

感觉后面的部份还是讲的有点含糊
待加强!!!!!

参考1
参考2
参考3
参考4–更新一条sql

三种存储引擎的区别
参考5

myisam (5.1以前的版本,上面说5.7 修正一下)
该存储引擎保存了单独的索引文件.myi 而且它的索引是直接定位到OFFSET的,注意innodb 没有单独的物理存储索引文件,且innodb索引寻址是先定位到块数据,再定位到行数据,所以前者的索引速度快于后者(innodb)但是它不支持事务、不支持外键,所以适合场景:读多写少,对完整性要求不高的场景。
innodb
支持事务、支持外键、支持崩溃修复和自增列,对业务的完整性要求高。对读写效率较差,占用数据空间较大
在写入的时候也讲过undo、buffer pool
比如张三给李四转钱,这个事务要求表中张三的金额减少,李四金额增加,如果失败,则两个人的存款余额不变,如果转账成功,张三减少的数量就是李四增加的数量。保证了事务的完整性。

因为存储引擎的设置粒度是表级别,也就是说可以在每张表中设置不同的存储引擎。
查看表的时候,就可以看到

show table biao1;

设置biao1 的存储引擎
create table t1 engine = INNODB;
或者选择 MyISAM、MEMORY

在这里插入图片描述

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

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

相关文章

云原生构建 微服务、容器化与容器编排

第1章 何为云原生,云原生为何而生 SOA也就是面向服务的架构 软件架构的发展主要经历了集中式架构、分布式架构以及云原生架构这几代架构的发展。 微服务架构,其实是SOA的另外一种实现方式,属于SOA的子集。 在微服务架构下,系统…

Web本体语言OWL

语义网(Semantic Web): 语义网是万维网联盟(W3C)提出的一种愿景,旨在增强现有Web的表达能力和智能处理能力,通过标准化的技术手段赋予网络数据更加精确和可计算的语义,使得机器能够…

ReactNative项目构建分析与思考之react-native-gradle-plugin

前一段时间由于业务需要,接触了下React Native相关的知识,以一个Android开发者的视角,对React Native 项目组织和构建流程有了一些粗浅的认识,同时也对RN混合开发项目如何搭建又了一点小小的思考。 RN环境搭建 RN文档提供了两种…

西门子PLC中的程序块及类别详解

在PLC的编程中,程序块是指一组逻辑控制代码,用于实现系统中特定的控制功能。程序块主要分为四类,包括函数块(FB)、函数(FC)、数据块(DB)和组织块(OB&#xff…

300分钟吃透分布式缓存-24讲:Redis崩溃后,如何进行数据恢复的?

Redis 持久化是一个将内存数据转储到磁盘的过程。Redis 目前支持 RDB、AOF,以及混合存储三种模式。 RDB Redis 的 RDB 持久化是以快照的方式将内存数据存储到磁盘。在需要进行 RDB 持久化时,Redis 会将内存中的所有数据以二进制的格式落地,每…

Python算法题集_在排序数组中查找元素的第一个和最后一个位置

Python算法题集_在排序数组中查找元素的第一个和最后一个位置 题34:在排序数组中查找元素的第一个和最后一个位置1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【二分法两次左边界】2) 改进版一【二分法左右边界】3) 改进版二【第三…

基于YOLOv8深度学习的葡萄病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

寻找完全平方数——浮点数陷阱

【题目描述】 输出所有形如aabb的4位完全平方数(即前两位数字相等,后两位数字也相等)。 【解析】 一、问题分析 从问题出发,题目要求输出的是满足一定条件的数。数在计算机中是要占存储空间的,要在计算机中表示一个…

C语言字符串型常量

在C语言中,字符串型常量是由一系列字符组成的常量。字符串常量在C中以双引号(")括起来,例如:“Hello, World!”。字符串常量在C中是不可变的,也就是说,一旦定义,就不能修改其内…

Web自动化测试流程:从入门到精通,帮你成为测试专家

摘要: Web应用程序在今天的软件开发中占据着越来越重要的地位。保证Web应用程序的质量和稳定性是非常必要的,而自动化测试是一种有效的方法。本文将介绍Web自动化测试流程,并提供代码示例。 步骤一:选取测试工具 选择适合自己团…

像SpringBoot一样使用Flask - 5.统一处理(日志、异常、响应报文)

接上文《像SpringBoot一样使用Flask - 4.拦截器》,通过拦截器处理一些日志,异常、还有统一的响应报文。 统一的目的就是为了让前后端调用请求不会因为各自习惯而随意编写,增加技术人员快速上手及代码的可阅读性。 一、定义一个返回类。是不是…

【前端Vue】Vue从0基础到大神完整教程第1篇:vue基本概念,vue-cli的使用【附代码文档】

Vue从0基础到大神学习完整教程完整教程(附代码资料)主要内容讲述:vue基本概念,vue-cli的使用,vue的插值表达式,{{ gaga }},{{ if (obj.age > 18 ) { } }},vue指令,综合…

20行代码搞定PDF表格转为Excel表

1.环境准备 安装好python并且配置好环境安装pdfplumber、xlwt库使用Vscode或者PyCharm等编辑器 在pycharm中如果报红,可以鼠标点击报红的库,altenter进行安装 2.代码部分 import pdfplumber import xlwt # 读取源pdf文件 pdf pdfplumber.open("…

图像处理ASIC设计方法 笔记8 卷积计算芯片的结构

(一) P81 卷积芯片内部模板框图 该设计有两个数据通路:图像数据和模板数据。 图像数据是经过帧控制、实时图SPRAM(写控制、 SPRAM读控制、数据读控制)、计算单元; 模板数据是经过模板SPRAM、计算单元。 4.5.4运算单元像素寄存器控制 存储SPRAM写入的64bit数据,输出为…

Unity2023.1.19_DOTS_JobSystem

Unity2023.1.19_DOTS_JobSystem 上篇我们知道了DOTS是包含Entity Component System,Job System,Burst compiler三者的。接下来看下JobSystem的工作原理和具体实现。 简介: 官方介绍说:JobSystem允许您编写简单而安全的多线程代…

C++篇 语 句

到目前为止,我们只见过两种语句: return 语句和表达式语句。根据语句对执行顺 序的影响,C 语言其余语句大多属于以下 3 大类。 选择语句: if 语句和 switch 语句。循环语句: while 语句, do...while 语句和…

XSS漏洞-存储型漏洞案例

一、环境 在github上找DVWA的靶机环境 DVWA存储库 二、复现 先将其安全等级改为低 然后点击存储型的xss,先随便写几条看看现象 可以看到我们写的都展示在了下面的框中 看看源码,分析在存储时的漏洞 我们可以看到,在对数据插入的时候&am…

筛选出等于1的式子

然后统计和归类 归类分行归类方法 算术符号归类 数字大小排序算术符号归类 import randomdef generate_expression(num_range, num_count, operators):nums random.sample(range(num_range[0], num_range[1]1), num_count)ops random.choices(operators, knum_count-1)expre…

ChatGPT 结合实际地图实现问答式地图检索功能基于Function calling

ChatGPT 结合实际地图实现问答式地图检索功能基于Function calling ChatGPT结合实际业务,主要是研发多函数调用(Function Calling)功能模块,将自定义函数通过ChatGPT 问答结果,实现对应函数执行,再次将结果…

List(CS61B学习记录)

问题引入 上图中,赋给b海象的weight会改变a海象的weight,但x的赋值又不会改变y的赋值 Bits 要解释上图的问题,我们应该从Java的底层入手 相同的二进制编码,却因为数据类型不同,输出不同的值 变量的声明 基本类型…