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位完全平方数(即前两位数字相等,后两位数字也相等)。 【解析】 一、问题分析 从问题出发,题目要求输出的是满足一定条件的数。数在计算机中是要占存储空间的,要在计算机中表示一个…

L1-035 情人节

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。 输入格式: 输入按照点赞…

C语言字符串型常量

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

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

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

探讨代理IP在大数据收集、网络营销中的战略角色

代理IP在大数据收集和网络营销中扮演着至关重要的战略角色,其主要体现在以下几个方面: 1. 避免IP限制与反爬机制: - 在大数据收集过程中,尤其是网络爬虫抓取数据时,目标网站通常会设置访问频率限制或IP封锁策略以防止恶…

Linux作业调度和服务管理

目录 作业调度 调整进程的优先级 服务管理 systemd管理服务操作 systemd管理target(一点点) 作业调度的本质仍然是进程,之所以叫做作业调度,作业是以shell为单位的,一个shell建立的作业,不会被另外一个…

12 数据库安全和管理

文章目录 数据库安全和管理表的复制数据库备份MySQL远程连接添加用户和授权 数据库安全和管理 表的复制 表能根据实际需求复制数据复制表时不会把KEY属性复制过来 语法 create table 表名 select 查询命令;create table student select name,age,score from class where sc…

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

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

ZigBee技术与实践教程(持续更新笔记)

1.安全性 802.15.4 在数据传输过程中提供了三级安全性。 (1)第一级实际是无安全性方式,对于某种应用,如果安全性并不重要或者上一层已经提供了安全性保护,器件就可以采用这种方式来转移数据。 (2&#x…

(已解决)报错:Could not load the Qt platform plugin “xcb“

完整报错信息 QObject::moveToThread: Current thread (0x6a879f0) is not the object’s thread (0x61bb590). Cannot move to target thread (0x6a879f0)qt.qpa.plugin: Could not load the Qt platform plugin “xcb” in “” even though it was found. This application…

深入了解 Python 的 compile() 函数

在 Python 中,compile() 是一个内置函数,用于将字符串形式的 Python 代码编译为可执行的代码对象,或者将 AST(抽象语法树)对象编译为代码对象。本文将深入探讨 compile() 函数的用法、参数和返回值,以及其在…

【Java】使用`LinkedList`类来实现一个队列,并通过继承`AbstractQueue`或者实现`Queue`接口来实现自定义队列

使用LinkedList类来实现一个队列,并通过继承AbstractQueue或者实现Queue接口来实现自定义队列。 以下是一个简单的示例,其中队列的大小与另一个List的容量保持一致: import java.util.LinkedList; import java.util.List; import java.util…

网络安全运营的工作内容(附资料下载)

【推荐】最新网络安全运营方案和实践合集(共80多份).zip 网络安全运营的工作内容是一个多层次、多维度的体系,涵盖了多个关键领域以确保网络环境的稳定和安全。以下是一些主要的工作内容: 安全策略制定与实施: 制定网…