优化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…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...