优化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…...
VoxCPM-1.5-WEBUI问题解决:部署常见错误与一键启动脚本详解
VoxCPM-1.5-WEBUI问题解决:部署常见错误与一键启动脚本详解 1. 快速入门指南 1.1 镜像部署准备 在开始使用VoxCPM-1.5-WEBUI之前,您需要确保具备以下条件: 支持CUDA的NVIDIA显卡(建议RTX 3060及以上)至少16GB系统内…...
Natapp内网穿透避坑指南:Windows系统常见报错解决方案(2024最新版)
Natapp内网穿透避坑指南:Windows系统常见报错解决方案(2024最新版) 在开发过程中,内网穿透工具如Natapp已成为连接本地开发环境与外部网络的必备利器。然而,对于初次接触Natapp的Windows用户来说,从安装配…...
Kandinsky-5.0-I2V-Lite-5s实战案例:用会议合影生成带入场动画的团队介绍视频
Kandinsky-5.0-I2V-Lite-5s实战案例:用会议合影生成带入场动画的团队介绍视频 1. 项目背景与价值 想象一下这个场景:公司刚开完年度战略会议,团队拍了一张大合影。现在需要制作一个团队介绍视频,传统方式需要找专业剪辑师&#…...
ECharts 5.4.3实战:3步打造科技感爆棚的流光折线图(附完整代码)
ECharts 5.4.3实战:3步打造科技感爆棚的流光折线图(附完整代码) 在数据可视化领域,ECharts凭借其强大的功能和灵活的配置选项,已经成为前端开发者的首选工具之一。特别是其丰富的动画效果,能够为静态数据注…...
Heritrix3源码深度解析:从CrawlURI到ProcessorChain的执行流程
Heritrix3源码深度解析:从CrawlURI到ProcessorChain的执行流程 【免费下载链接】heritrix3 Heritrix is the Internet Archives open-source, extensible, web-scale, archival-quality web crawler project. 项目地址: https://gitcode.com/gh_mirrors/he/herit…...
PyTorch 3.0静训性能断崖预警:当AllReduce延迟>8.3ms或图编译耗时>117s时,你的训练任务已在 silently fail——附实时诊断CLI工具
第一章:PyTorch 3.0静态图分布式训练的静默失效危机全景PyTorch 3.0 引入的 TorchScript 静态图编译机制与 torch.distributed 的深度耦合,在多节点多卡场景下暴露出一类高危静默失效现象:训练进程持续运行、梯度同步无报错、loss 曲线看似收…...
效率倍增:基于快马平台集成最新openclaw构建自动化采集工具
最近在做一个数据采集项目时,发现手动写爬虫实在太费时间了。每次都要重复处理请求头、代理设置、数据清洗这些基础工作,效率特别低。后来发现了openclaw这个工具包的新版本,正好结合InsCode(快马)平台快速搭建了一个自动化采集工具ÿ…...
Java 无人图书借阅系统设计与完整源码实现
以下是一个基于Java的无人图书借阅系统的设计与完整源码实现方案,涵盖系统架构、核心模块、数据库设计、关键代码实现及部署建议:一、系统架构设计1. 分层架构表现层:用户端:微信小程序(UniApp开发) H5页面…...
手把手教你用Cline插件5分钟搞定DeepSeek-R1模型接入(附硅基流动平台2000万Token福利)
5分钟极速上手:用Cline插件无缝对接DeepSeek-R1大模型实战指南 当你第一次听说只需要5分钟就能让一个强大的AI模型为你工作时,可能会觉得这像是某种夸张的营销话术。但作为一个曾经花了整整三天时间才搞定第一个模型接入的开发者,我可以负责任…...
突破内容壁垒:5大核心优势解锁知识自由
突破内容壁垒:5大核心优势解锁知识自由 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的数字时代,付费墙已成为获取优质内容的主要障碍。无论是学术…...


