优化Mysql
目录
Mysql优化就四种:定位慢查询/sql执行计划/索引/Sql优化经验... 2
1Mysql如何定位慢查询?... 2
2Sql语句执行很慢,如何分析呢?... 3
2.1那这个SQL语句执行很慢,如何分析呢?. 3
3.了解过索引吗?(什么是索引) 3
3.1什么是聚簇索引,什么是非聚簇索引?什么是回表查询?... 3
3.1.1聚集索引选取规则... 4
3.1.2回表查询... 4
4什么是覆盖索引... 5
4.1超大分页处理?... 5
5索引创建原则有哪些?... 6
6什么情况下索引会失效?... 6
7谈谈你对sql优化的经验... 7
7.1表的设计优化、避免索引失效、sql语句优化等... 7
8事务的特性... 9
9并发事务的问题,隔离级别... 9
9.1解决方案,对事务进行隔离... 9
10undo log和redo log的区别?... 11
11解释一下mvcc?... 12
12.mysql主从原理?... 13
13项目中用过分库分表吗?. 14
13.1垂直分库和分表... 14
13.2水平分库... 14
Mysql优化就四种:定位慢查询/sql执行计划/索引/Sql优化经验
1Mysql如何定位慢查询?
基本就是页面加载慢,接口的响应测试时间长。
怎么确定是mysql的问题呢,如果是sql问题,怎么找出慢的原因呢。
方案一:开源工具:监听调试。调试工具arthas。运维工具:普罗米修斯,skywalking
方案一主要就是哪些接口慢,sql时间长给监控排序罗列出来。
方案二:慢日志查询。
慢查询日志开启slow-query-log=1
慢日志时间为2long-query-time=2
Sql超过两秒则记录/一般调试的时候才开启,生产的时候不开启不然会损坏mysql性能
1.介绍一下当时产生问题的场景(我们当时的一个接口测试的时候非常的慢,压测的结果大概5秒钟)
2.我们系统中当时采用了运维工具(Skywalking),可以监测出哪个接口,最终因为是sql的问题
3.在mysql中开启了慢日志查询,我们设置的值就是2秒,一旦sql执行超过2秒就会记录到日志中(调试阶段)
2Sql语句执行很慢,如何分析呢?
Explain和desc就可以分析sql语句了
字段名词解释:
possible key 当前sql可能会使用到的索引
key 当前sql实际命中的索引
key len 索引占用的大小
extra额外的优化建议
type 这条sql的连接的类型,性能由好到差为NULL、system、const、eq ref、ref、range、index、all
2.1那这个SQL语句执行很慢,如何分析呢?
可以采用MySQL自带的分析工具 EXPLAIN
通过key和key len检查晟否命中了索引(索引本身存在是否有失效的情况)
通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描
通过extra建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复
3.了解过索引吗?(什么是索引)
索引(index)是帮助MySQI高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(B+树),这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法这种数据结构就是索引。
3.1什么是聚簇索引,什么是非聚簇索引?什么是回表查询?
个人理解,聚簇全是主键,然后拿行数据。只有一行
非聚簇就是通过某个数据字段找这个主键,可能会有多个。
聚簇索引也就是聚集索引。
二级索引也就是非聚集索引。
什么是聚集索引,什么是二级索引(非聚集索引)什么是回表?
聚集索引(Clustered Index)将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据必须有,而且只有一个,个人理解只对应一行数据
二级索引(Secondary Index)将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键可以存在多个,叶子节点存储对应的主键值。
3.1.1聚集索引选取规则
如果存在主键,主键索引就是聚集索引。
如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。
3.1.2回表查询
大多数的数据都用的非聚簇索引。
回表查询就是通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表
4什么是覆盖索引
个人理解,不用回表查询的查询语句,比如局促和非聚簇都可以的。
4.1超大分页处理?
覆盖索引+子查询
比如分页查询需要九百万limit仅仅需要十条怎么才能快?
正常直接limit获取*你这样拿所有行数据很慢。
但你如果先拿到id,再通过id来查询就非常快,省去了九百万的时间代价。
5索引创建原则有哪些?
先陈述自己在工作中用到的,主键索引,唯一索引,根据业务创建的复合索引
单表超过十万条数据,可以建立索引。
3尽量不要好几条数据都是北京市,这种字段不适合索引
4尽量字段短一些,太长的可以截取一部分,建立前缀索引。
5尽量使用联合索引或者叫做复合索引。
总结重点:数据量大;查询频繁;排序,分组,查询条件的字段;尽量联合索引,避免回表;控制数量。
6什么情况下索引会失效?
命中索引就是查询的时候使用到了索引。
1.复合索引。不能跳过某一列去查询,可能会失效。违反最左前缀法则,索引失效。
2.范围查询,>1后面的索引是失效的。这叫范围查询最右边的列,不能使用索引。
3.不要在索引列上运算,不然会失效
4.类型转换,比如明明是字符串,您不加单引号,那也索引失效。
5.%开头的模糊查询也会失效,放在末尾%不会影响索引
7谈谈你对sql优化的经验
7.1表的设计优化、避免索引失效、sql语句优化等
参考阿里开发手册嵩山版本
- 类型选择,tinyint或者char是固定类型但性能好。
- 索引创建原则,查询的时候避免索引失效
8事务的特性
ACID分别就是原子性,隔离性,一致性,隔离性,持久性。
9并发事务的问题,隔离级别
- 脏读就是,读的是错误的修改后还没提交的数据。
- 不能读两次,又是事务前,又是事务后。
9.1解决方案,对事务进行隔离
打叉就是解决的问题。
10undo log和redo log的区别?
缓冲池和数据页。Sql操作肯定先去内存的缓冲池找数据操作,如果找不到就再去磁盘。然而操作缓冲池以后,要将数据同步到磁盘中,没有同步过去的称为脏页。一旦服务器宕机,内存中的数据会丢失。于是就引进了redo log
关于mysql的事务提交,增删改数据,为了提高性能。引入了两块区域,一个是内存结构,一个是磁盘结构。
磁盘的结构主要是存储的数据页,比如说某一个表的ibd文件里边包含了很多数据页。每个页中存储的就是sql一行行的数据。
增删改首先会操作内存。内存的概念就是缓冲池。数据库先操作内存,如果没有数据才考虑磁盘,操作完内存会将数据同步到磁盘中。
主要是用来实现事务的持久性的。
Redo log 由两部分组成,redo log buffer(内存)和redo log file (磁盘)
内存中有buffer pool和redo log buffer,当增删改buffer pool的时候redo log buffer就记录数据的变化。一旦发生变化,redo log buffer记录数据页的变化,就会把这些数据记录到磁盘文件中,也就是redo log file日志文件中。
所以一旦从内存同步数据到磁盘失败的话,就会从redo log file日志文件中恢复数据
这个过程遵循WAL机制,write-ahead-logging就是先写日志redo log,所以当脏页正常写到磁盘中的时候,日志就没用了。这个日志文件在磁盘中是两份,循环写。
Undo log记录相反日志,可以实现事务的一致性和原子性。
11解释一下mvcc?
个人理解大概实现了隔离性。
12.mysql主从原理?
主库会把ddl(create-drop)和dml(增删改)写进binlog二进制文件,
从库会有一个io thread线程来读取这个二进制日志文件,
然后写进从库的一个中继文件relay log中,
再由中继文件通过sql thread线程同步到从库的数据库中。
13项目中用过分库分表吗?
单表数据量达到一千万,或者20G以后。就要分库分表了
13.1垂直分库和分表
个人理解:垂直分库,就是根据业务不同的表放在不同的库中。
用户微服务,商品微服务,订单微服务。
比如基本信息,详细信息,只有感兴趣,点进去才会展示。
对比垂直分表,个人理解,不同的字段拆成不同的表中。
热数据冷数据。
特点:
1,冷热数据分离2,减少IO过渡争抢,两表互不影响
13.2水平分库
每个库存储的数据是不一样的,但是类型是一样的。所有库的数据加起来才是这个业务的所有数据。
但是,你想要拿数据,该怎么选择库呢,就对id进行一个分库,可以路由规则
水平分库用的更多一些,海量数据一般都水平分库。
高并发提高磁盘io性能一般垂直分库
垂直分表,冷热数据分离/
相关文章:
优化Mysql
目录 Mysql优化就四种:定位慢查询/sql执行计划/索引/Sql优化经验... 2 1Mysql如何定位慢查询?... 2 2Sql语句执行很慢,如何分析呢?... 3 2.1那这个SQL语句执行很慢,如何分析呢?. 3 3.了解过索引吗?(什么是索引)…...
如何使用MethodChannel通信
文章目录 1 概念介绍2 实现方法3 经验总结我们在上一章回中介绍了Visibility组件相关的内容,本章回中将介绍Flutter与原生平台通信相关的内容.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 在移动开发领域以Android和IOS SDK开发出的应用程序叫原生开发,开发同一个程序…...
【JavaWeb】JavaWeb笔记 HTTP
文章目录 简介HTTP1.0和HTTP1.1的区别 请求和响应报文报文的格式请求报文form表单发送GET请求特点GET请求行,请求头,请求体form表单发送post请求特点post的请求行 请求头 请求体 响应报文响应状态码更多的响应状态码 简介 HTTP 超文本传输协议 (HTTP-Hyper Text transfer proto…...
Java项目实战II基于Java+Spring Boot+MySQL的甘肃非物质文化网站设计与实现(源码+数据库+文档)
目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者 一、前言 甘肃省作为中国历史文化名省,拥有丰富的非物质文化遗产资源,涵盖表演艺术、手…...
数据结构--包装类简单认识泛型
目录 1 包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱,自动装箱和自动拆箱 2 什么是泛型 3 引出泛型 3.1 语法 4 泛型类的使用 4.1 语法 4.2 示例 5 泛型的上界 5.1 语法 5.2 示例 5.3 复杂示例 8 泛型方法 8.1 定义语法 8.2 示例 总结 1 …...
c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能
网上写c#调用winscp实现的资料很少,且写的不够详细。本人查了下winscp的libraries说明,写了个小工具,供大家参考。 winscp的接口说明地址如下: WinSCP .NET Assembly and COM Library :: WinSCP 一、先展示一下小工具的界面 1、…...
【Android 13源码分析】Activity生命周期之onCreate,onStart,onResume-1
忽然有一天,我想要做一件事:去代码中去验证那些曾经被“灌输”的理论。 – 服装…...
达梦数据库开启归档模式
目录 一、什么是归档模式? 二、开启归档模式的步骤 1、创建归档目录 2、进入dm数据库bin目录 3、登录数据库 4、关闭数据库 5、启动数据库到Mount状态 6、增加本地归档日志文件 7、开启归档 8、启动数据库 9、验证是否开启成功 三、开启归档模式的优…...
C++ 语言特性07 - 静态成员的初始化
一:概述 1. 静态成员变量通常在类定义内部声明,并在类定义外部定义和初始化。 class MyClass { public:static int staticVar; // 声明 };int MyClass::staticVar 42; // 定义和初始化 2. 从C11开始,可以在类内直接初始化静态数据成员&am…...
【数据结构】图论基础
文章目录 图的概念图的基本概念图的类型图的表示方法 图的相关基本概念1. 路径(Path)2. 连通性(Connectivity)3. 图的度(Degree)4. 子图(Subgraph)5. 生成树(Spanning Tr…...
HTML5实现好看的唐朝服饰网站模板源码2
文章目录 1.设计来源1.1 网站首页1.2 唐装演变1.3 唐装配色1.4 唐装花纹1.5 唐装文化 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.ne…...
golang web笔记-2.请求request
什么是request http消息分为request(请求) 和 response(响应) request:在go中是一个struct,代表了客户段发送的http请求,已可以通过request 的方法访问请求中的cookie、URL、User Agent…...
docker的安装与启动——配置国内Docker源
移除旧版本docker sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 配置docker yum源。 sudo yum install -y yum-utils sudo yum-config-manager –add-repo ht…...
httpsok-v1.17.0-SSL通配符证书自动续签
🔥httpsok-v1.17.0-SSL通配符证书自动续签 介绍 httpsok 是一个便捷的 HTTPS 证书自动续签工具,基于全新的设计理念,专为 Nginx 、OpenResty 服务器设计。已服务众多中小企业,稳定、安全、可靠。 一行命令,一分钟轻…...
相机、镜头参数详解以及相关计算公式
一、工业相机参数 1、分辨率 相机每次采集图像的像素点数,也是指这个相机总共有多少个感光晶片。在采集图像时,相机的分辨率对检测精度有很大的影响,在对同样打的视场成像时,分辨率越高,对细节的展示越明显。 相机像素…...
【微服务】组件、基础工程构建(day2)
组件 服务注册和发现 微服务模块中,一般是以集群的方式进行部署的,如果我们调用的时候以硬编码的方式,那么当服务出现问题、服务扩缩容等就需要对代码进行修改,这是非常不好的。所以微服务模块中就出现了服务注册和发现组件&…...
ESP32微信小程序SmartConfig配网
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 ESP32&微信小程序SmartConfig配网 前言一、SmartConfig是什么?二、使用乐鑫官方的smart_config例子1.运行照片 三、微信小程序总结 前言 本人是酷爱ESP32S3这…...
【PostgreSQL】提高篇——深入了解不同类型的 JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)应用操作
1. JOIN 的基础概念 在 SQL 中,JOIN 是用于从两个或多个表中组合行的操作。JOIN 允许我们根据某些条件将表中的数据关联在一起。常见的 JOIN 类型包括: INNER JOIN:仅返回两个表中满足连接条件的行。LEFT JOIN(或 LEFT OUTER JO…...
师生健康信息管理:SpringBoot技术突破
第4章 系统设计 4.1 系统体系结构 师生健康信息管理系统的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 师生健康信息管理系统结构图,如图4-3所示。 图4-3 师生健康信息管理系统结构图 4.2…...
【完-网络安全】Windows注册表
文章目录 注册表启动项及常见作用五个根节点常见入侵方式 注册表 注册表在windows系统的配置和控制方面扮演了一个非常关键的角色,它既是系统全局设置的存储仓库,也是每个用户的设置信息的存储仓库。 启动项及常见作用 快捷键 WinR打开运行窗口&#x…...
车辆重识别(2021NIPS在图像合成方面,扩散模型打败了gans网络)论文阅读2024/10/01
本文在架构方面的创新: ①增加注意头数量: 使用32⇥32、16⇥16和8⇥8分辨率的注意力,而不是只使用16⇥16 ②使用BigGAN残差块 使用Big GAN残差块对激活进行上采样和下采样 ③自适应组归一化层 将经过组归一化操作后的时间步和类嵌入到每…...
掌控物体运动艺术:图扑 Easing 函数实践应用
现如今,前端开发除了构建功能性的网站和应用程序外,还需要创建具有吸引力且尤为流畅交互的用户界面,其中动画技术在其中发挥着至关重要的作用。在数字孪生领域,动画的应用显得尤为重要。数字孪生技术通过精确模拟现实世界中的对象…...
Python从入门到高手4.2节-掌握循环控制语句
目录 4.2.1 理解循环控制 4.2.2 for循环结构 4.2.3 循环结构的else语句 4.2.4 while循环结构 4.2.5 循环结构可以嵌套 4.2.6 国庆节吃好玩好 4.2.1 理解循环控制 我们先来搞清楚循环的含义。以下内容引自汉语词典: 循环意指往复回旋,指事物周而复始地运动或变…...
CSS 中的overscroll-behavior属性
overscroll-behavior 是 CSS 中的一个属性,它用于控制元素在发生滚动时,当滚动范围超出其边界时的行为。这个属性对于改善用户体验特别有用,尤其是在移动端设备上,当用户尝试滚动一个已经达到滚动极限的元素时,可以通过…...
GPT对话知识库——在STM32的平台下,通过SPI读取和写入Flash的步骤。
目录 1,问: 1,答: 步骤概述 步骤 1:SPI 初始化 步骤 2:Flash 初始化(可选) 步骤 3:发送读取命令 示例:发送读取数据命令 步骤 4:读取数据…...
Pytorch基本知识
model.state_dict()、model.parameters()和model.named_parameters()的区别 parameters()只包含模块的参数,即weight和bias(包括BN的)。 named_parameters()返回包含模块名和模块的参数的列表,列表的每个元素均是包含layer name和layer param的元组。layer param就是param…...
vue3使用Teleport 控制台报警告:Invalid Teleport target on mount: null (object)
Failed to locate Teleport target with selector “.demon”. Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree main.…...
使用产品前的环境搭建
对于想学习编程的朋友们,使用本产品解决日常功能需求的同时会对自己编程能力具有较大帮助和提升。 目录 环境搭建 前言: 安装python 安装vscode 下载安装Anaconda 通过conda配置python环境 创建虚拟环境 查看环境是否创建成功 激活环境 安装pyt…...
JAVA基础语法 day07
一、final关键字 1.1final的基础知识 用来修饰类,方法,变量 final修饰类,该类被称为终极类,不能被继承了 final修饰方法,该方法称为终极方法,不能被重写了 final修饰变量,该变量仅能被赋值…...
ZLMediaKit编译运行
ZLMediaKit-github官网 快速开始 代码依赖与版权声明 MediaServer支持的HTTP MediaServer支持的HTTP HOOK API cd ZLMediaKit mkdir build cd build cmake … && make -j20 cd ZLMediaKit/release/linux/Debug ./MediaServer //./MediaServer -h 查看 //./MediaSe…...
wordpress 免费餐饮主题/最近发生的热点事件
简介 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使…...
网站建设验收程序/神马推广
EIGRP的负载平衡与RIP和OSPF负载平衡有很大区别, EIGRP支持非等价负载平衡,即在两条不等开销的路径上做负载平衡,下面的实例将对EIGRP的非等价负载平衡做演示。 演示目标:理解并配置EIGRP的非等价负载平衡。 演示环境:…...
做电商网站有什语言好/引流推广怎么做
原版程序(死机版) PrivateSub Timer1_Timer()Sub Timer1_Timer() Dim a Dim CheckValue As Integer Timer1.Enabled False 关闭定时器 **********************先检测通信是否正常 处理上下位机第一次通信就失败的情况 …...
重庆网站建设 公司/长沙互联网推广公司
runoob:run noob 的合并,原意 奔跑吧菜鸟 依据个人经验: 将<style>标签放到html对应的<head>标签中 <script>标签放到<body>标签之后引入js:<script src"https://unpkg.com/vue/dist/vue.js&quo…...
wordpress书本目录模板/百度seo排名查询
下载 PowerDesigner 15.1 的安装文件和破解文件 PowerDesigner 15.1 下载地址:http://pan.baidu.com/share/link?shareid177870&uk3626956064 破解文件下载地址:http://pan.baidu.com/share/link?shareid177873&uk3626956064 安装详细图解步骤…...
增城网站建设怎么选择/关键词调价工具哪个好
Accordion 是一个可以让你的页面显示多个Panel面板,用户方便地展开或者关闭一系列页面Panel。它有点类似多个 CollapsiblePanels 控件的组合。 但是在同一时间内,只能展开其中的一个Panel, 每一个 Accordion 控件包括若干个 AccordionPane 控…...