当前位置: 首页 > news >正文

优化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语句优化等

       参考阿里开发手册嵩山版本

  1. 类型选择,tinyint或者char是固定类型但性能好。
  2. 索引创建原则,查询的时候避免索引失效

 

8事务的特性

ACID分别就是原子性,隔离性,一致性,隔离性,持久性。

9并发事务的问题,隔离级别

  1. 脏读就是,读的是错误的修改后还没提交的数据。
  2. 不能读两次,又是事务前,又是事务后。

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&#xf…...

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…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...