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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统概念】第12章:大容量存储阶段

文章目录 0.前言12.1 概述12.2磁盘结构12.3 磁盘调度12.3.1 FCFS调度12.3.2 SSTF调度12.3.3 SCAN调度12.3.4 C-SCAN调度12.3.5 如何选择磁盘调度 0.前言 文件系统从逻辑上来看包括三部分。第10章讨论了文件系统的用户和程序员的接口。第11章描述了操作系统实现这种接口的内部数…

【脚本玩漆黑的魅影】全自动丢球

文章目录 原理全部代码 原理 启动后截图。 丢球以后再截图。 如果两图一致,说明没成功,读档重来。 如果两图不一致,说明成功了。 while True:press(A)time.sleep(2)if is_same_img(ImageGrab.grab(), data_img):press(save2)else:break全部…

基于java+springboot+vue实现的农产品智慧物流系统(文末源码+Lw)23-239

课题意义 现如今,信息种类变得越来越多,信息的容量也变得越来越大,这就是信息时代的标志。近些年,计算机科学发展得也越来越快,而且软件开发技术也越来越成熟,因此,在生活中的各个领域&#x…

【stm32】hal库学习笔记--定时器输出PWM波

【stm32】hal库学习笔记–定时器输出PWM波 PWM波原理 输出比较 输入捕获 驱动函数 定时器驱动函数 PWM波驱动函数 定时器基本不使用DMA方式 定时器中断处理通用函数 HAL_TIM_IRQHandler实验一:输出固定占空比PWM波 时钟树配置 PF9 改为tim14CH1 tim14配置 开启tim14全局中…

求递归算法时间复杂性

递推方法 求n!的递归算法: 该算法的时间复杂性: 递推过程: 主定理方法 要求:a>1,b>1 求解步骤: f(n)的渐进上界是以n的log以b为底的e次幂 判断关系后一定要满足这三个对应规则 例题:…

Java中常用的集合及方法(2)

在Java(JDK8)中,集合(Collection)是数据结构的实现,用于存储和操作对象集合。 集合(Collection)中包含的一般类或接口: 在这其中呢,我们经常使用的其实就是L…

nginx 学习总结

1.nginx 是什么以及nginx 的用途? Nginx 是一种高性能的 Web 和反向代理服务器,以及邮件(IMAP/POP3)代理服务器。它最初是由俄罗斯程序员 Igor Sysoev 使用 C 语言开发的开源项目。Nginx 以其占用内存少、并发能力强而闻名&…

【Leetcode】299. 猜数字游戏

文章目录 题目思路代码结果 题目 题目链接 你在和朋友一起玩 猜数字(Bulls and Cows)游戏,该游戏规则如下: 写出一个秘密数字,并请朋友猜这个数字是多少。朋友每猜测一次,你就会给他一个包含下述信息的提…

专题二 -滑动窗口 - leetcode 209. 长度最小的子数组 | 中等难度

leetcode 209. 长度最小的子数组 leetcode 209. 长度最小的子数组 | 中等难度1. 题目详情1. 原题链接2. 基础框架 2. 解题思路1. 题目分析2. 算法原理3. 时间复杂度 3. 代码实现4. 知识与收获 leetcode 209. 长度最小的子数组 | 中等难度 1. 题目详情 给定一个含有 n 个正整数…

找不到duilib.dll:是什么文件?如何解决

当你尝试打开某个程序软件时,你可能会看到一条错误信息,提示你缺失一个名为“duilib.dll”的文件。这个文件通常与程序开发中使用的UI框架相关,缺失它会导致程序无法正常运行。那么,如何解决这个问题呢?本文将为你提供…

如何使用固定公网地址SFTP远程传输文件至安卓Termux本地目录?

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…

Nexus - Maven私服构建和使用

文章目录 1. Maven 私服简介2. Nexus下载安装3. 如何使用Nexus私服3.1 通过Nexus下载Jar包3.2 将Jar包部署到Nexus3.3 引用别人部署的jar包 1. Maven 私服简介 Maven 私服是一种特殊的Maven远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的远…

Springboot+vue的高校危化试剂仓储系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的高校危化试剂仓储系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller&#x…

01_04_JavaWEB02_JavaScript

JavaScript 参考尚硅谷再总结复习 一 JS简介 1.1 JS起源 Javascript是一种由Netscape(网景)的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,遗留的速度问题,为客户提供…

Linux多线程之线程同步

(。・∀・)ノ゙嗨!你好这里是ky233的主页:这里是ky233的主页,欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、线程同步的概念 二、条件变量 1.概念 2…

中型企业运维总监的成本优化实战案例——自建IDC机房

早期互联网快速发展的时候,相关领域的公司更注重拓展业务。 为了快速占领市场,他们往往投入了较高的成本。 但近年来,随着互联网人口红利的逐渐消退以及疫情的影响,越来越多的企业开始重视成本管理,从“粗放式经营”向…

使用J-Link Commander通过J-LINK以命令的形式来访问ARM通用MCU

通常我们的操作是写好程序然后将程序下载到芯片里面,然后运行程序来进行相应的操作,其实还可以使用 J − L i n k C o m m a n d e r J-Link\quad Commander J−LinkCommander通过 J − L I N K J-LINK J−LINK以命令的形式来简单访问ARM通用MCU&#xf…

Hadoop运行搭建——系统配置和Hadoop的安装

Hadoop运行搭建 前言: 本文原文发在我自己的博客小站,直接复制文本过来,所以图片不显示(我还是太懒啦!)想看带图版的请移步我的博客小站~ Linux镜像:CentOS7 系统安装:CentOS安装参考教程 系统网卡设置…

微信私信短剧机器人源码

本源码仅提供参考,有能力的继续开发 接口为api调用 云端同步 https://ys.110t.cn/api/ajax.php?actyingshilist 影视搜索 https://ys.110t.cn/api/ajax.php?actsearch&name剧名 每日更新 https://ys.110t.cn/api/ajax.php?actDaily 反馈接口 https://ys.11…

SpringCloud-Alibaba-Nacos教程

SpringCloud-Alibaba-Nacos教程 下载地址 https://github.com/alibaba/nacos/releases/tag/2.2.3 直接进入bin包 运行cmd命令 startup.cmd -m standalone 运行成功后 进入nacos可视化页面 账号密码默认都是nacos http://localhost:8848/nacos 微服务入驻Nacos服务注册…