MySQL——性能调优

性能调优(重要)

SQL 优化的目的

  • 减少磁盘 IO:尽可能避免全表扫描、尽量使用索引、尽量使用覆盖索引减少回表操作
  • 减少 CPU 和内存的消耗,尽可能减少排序、分组、去重之类的操作,尽量减少事务持有锁的时间

优化途径:找到 慢 SQL 语句 -> explain 分析 SQL,针对性优化 SQL

找到慢 SQL

使用慢查询日志,会帮我们记录耗时超过 n 秒的 SQL 语句,可以通过这个慢查询日志,发现慢 SQL

# 怎么发现慢SQL
show variables like '%slow_query_logs';# 开启慢SQL日志命令
set global show_query_log='ON';# 设置慢查询门限时间,如2s
set global long_query_time=2;# 也可以修改my.cnf文件,设置参数,然后重启MySQL

explain 的使用

找到慢 SQL 的语句后,explain 进行分析

explain select * from test

重点关注的列

type

执行效率由低到高

  1. ALL(全表扫描):性能最差,需要避免,上面的例子就用到了全表扫描
  2. index(全索引扫描):对二级索引进行全扫描,性能跟全表扫描差不多
  3. range
  4. ref
  5. eq_ref
  6. const

key:

表示实际用到的索引,如果为 NULL,则表示没用到索引。这种情况需要注意!

extra:记录一些额外的信息

  • Using filesort:表示 SQL 需要进行额外的步骤来对返回的结构进行排序。它会根据连接类型、存储排序键值和匹配条件的全部行记录进行排序
  • Using tempory:表示 MySQL 需要创建一个临时表来存储结构,非常消耗性能

rows

表明 SQL 返回请求数据的行数

如何设计索引

一张表中只有主键的默认添加索引的,还可以针对其他列建立索引来提高查询性能

通常情况下:

  • 频繁出现在 WHERE 中的列
  • 通常出现在 ORDER BY 中的列,这样查询的时候就不需要再进行一次排序了,因为建立在索引之后再 B+树中的记录都是按顺序排好的
  • 区分度很高的列,如我们在联合查询的时候,经常用用户名 + 其他一起查询,那么可以给用户名建立索引,因为用户名唯一,但是不能给性别建立索引,因为区分度不高,建索引没意义

注:建联合索引目的是减少回表

减少锁持有时间

案例 1 改语句顺序

执行 update 语句的时候,会对记录加行级锁,这个锁是在事务提交之后才会释放。

如果 update 和 select 语句之间没有什么依赖关系,那么应该把加锁的语句,放在事务靠后的位置,减少加锁的时间,这样能提高整体的并发性能

案例 2 分批删除

删除大量数据表数据的时候,最好采用分批删除的方式,如果直接执行删除操作 ,那么delete 语句产生的行锁,要在所有数据删除完之后,才会释放锁,锁持有的时间会很长,会影响其他事务的操作。改进方式,采用 limit 的方式来分批删除,比如每次取 1000 条记录进行删除,这也可以减少锁持有的时间。

其他

1、 避免索引失效

索引失效的七个场景:模型数空运最快

模糊查询、数据类型不匹配、函数、空值、运算、最左前缀匹配、全表更快

2、设计表的时候要做一定的反范式设计,建表的时候考虑增加冗余字段,尽可能保持单表查询,而非多表 JOIN

总结

如何优化慢 SQL?

  • 优化数据访问:使用 select + limit 避免使用 select * ,减少非必要的数据返回
  • 切分查询,针对一个大查询拆分成多个小查询,每个小查询只返回一部分数据,比如,批量删除 1000 万条数据,可以改成分批查询,一次删除 1000 条。
  • 覆盖索引:如果没有索引,就考虑建立普通索引或覆盖索引,通过覆盖索引的查询,避免回表
  • 避免索引失效
  • 减少连表查询
  • 优化排序

如果 SQL 和索引都没问题,查询还是很慢怎么办?

分析:往系统架构方向上思考

  • 分批查询:针对一个大查询,拆分成多个小查询,每个查询只返回一部分数据
  • 增加缓存,针对频繁查询的热点数据,我们可以方法 redis 中
  • 分表:如果表中的数据量很大了,比如表达到千万级别了,这时就可以考虑分表了,通过减少每次查询数据总量来解决数据查询缓慢的问题。
  • 主从复制:针对读多写少的情况,我们可以搭建 MySQL 主从模式来分摊请求的数量
  • 分库:针对写多读少的情况,单库的性能无法抗住高并发流量,就要进行分库,把请求分摊到多个实例中去

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Material UI 5 学习02-其它按钮组件

Material UI 5 学习02-其它按钮组件 一、IconButton按钮二、 ButtonGroup按钮组1、最基本的实例2、垂直按钮组 一、IconButton按钮 图标按钮通常适用于切换按钮&#xff0c;允许选择或选择单个选项 取消选择&#xff0c;例如在项目中添加或删除星号。 <IconButton aria-lab…

“互动+消费”时代,借助华为云GaussDB重构新零售中消费逻辑

场与人的关系 “人—货—场”是零售中重要的三要素&#xff0c;我们一直在追求&#xff0c;将零售中的人、货、场进行数字化并在云端进行整合&#xff0c;形成属于我们自己的云平台。 随着互联网技术为信息提供的便利&#xff0c;消费者的集体力量正在逐渐形成一股强大的反向…

保姆级GeoWebCache矢量瓦片切片流程

1矢量切片解决方案 1.1Geoserver配置geowebcache插件 参考文章 (53条消息) 独立安装geoservergeowebcache发布arcgis切片服务_itouch_ok的专栏-CSDN博客 1.将下载好的geoserver 2.19.3安装部署 将下载好的geowebcache 2.19.3的war包解压到 GeoServer 安装目录下./usr/loc…

使用Julia语言及R语言进行格拉布斯检验

在日常的计量检测工作中经常会处理各种数据&#xff0c;在处理数据之前会提前使用格拉布斯准则查看数据中是否存在异常值&#xff0c;如果存在异常值的话应该重新进行计量检测&#xff0c;没有异常值则对数据进行下一步操作。判断异常值常用的格拉布斯方法基于数据来自正态分布…

SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述 随着互联网架构的扩张&#xff0c;分布式系统变得日趋复杂&#xff0c;越来越多的组件开始走向分布式化&#xff0c;如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用&#xff0c;这些组件共同构成了繁杂的分布式网络。 思考以下…

智能驾驶规划控制理论学习06-基于优化的规划方法之数值优化基础

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

实践航拍小目标检测,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测&#xff0c;基于yolov…

高级货,极大提高效率,个人非常喜欢

软件简介&#xff1a; 软件【下载地址】获取方式见文末。注&#xff1a;推荐使用&#xff0c;更贴合此安装方法&#xff01; FileConverter中文版是一款免费软件&#xff0c;具有强大的功能。它支持多种文件格式的转换&#xff0c;包括视频、音频、文档等。您可以批量转换文件…

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;Bert…

Tomcat概念、安装及相关文件介绍

目录 一、web技术 1、C/S架构与B/S架构 1.1 http协议与C/S架构 1.2 http协议与B/S架构 2、前端三大核心技术 2.1 HTML&#xff08;Hypertext Markup Language&#xff09; 2.2 css&#xff08;Cascading Style Sheets&#xff09; 2.3 JavaScript 3、同步和异步 4、…

Node.js与Webpack笔记(一)

这里使用的16.19.0版本&#xff0c;官网和github没找到&#xff0c;去黑马2023年课程里找 篇幅较大会卡&#xff0c;此篇幅不写Webpack部分&#xff0c;留着下一篇 初识 1.什么是Node.js? Node.js 是一个独立的 JavaScript 运行环境&#xff0c;能独立执行 JS 代码&#xff…

【Linux】Linux原生异步IO:AIO

1、IO模型 1.1 简述 相信大家在搜索的时候,都会看到下面这张图,IO的使用场景:同步、异步、阻塞、非阻塞,可以组合成四种情况: 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可…

向微队列添加任务的四种方式

向微队列添加任务的四种方式 关于微任务&#xff0c;微队列&#xff0c;事件循环&#xff0c;可参考&#xff1a;深入&#xff1a;微任务与 Javascript 运行时环境 - Web API 接口参考 | MDN (mozilla.org) 先说答案, 四种方法&#xff1a; Promise.resolve().then();Mutation…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用&#xff1a; 为网页提供结构&#xff…

数据库管理-第158期 Oracle Vector DB AI-09(20240304)

数据库管理158期 2024-03-04 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&#xff09;1 创建示例表2 添加过滤条件的向量近似查询示例1示例2示例3示例4示例5示例6示例7 总结 数据库管理-第158期 Oracle Vector DB & AI-09&#xff08;20240304&a…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法&#xff0c;其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n&#xff0c;从第二个元素开始&#xff0c;将当前元素存储在临时变量temp中。 从当前元素的前一…

iOS 17.0 UIGraphicsBeginImageContextWithOptions 崩溃处理

在升级到iOS17后你会发现&#xff0c;之前版本运行的很好&#xff0c;这个版本突然会出现一个运行闪退。报错日志为*** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410 跟踪到具体的报错位置如下所示&a…

第4章 HSA运行时

HSA运行时是一种精简的用户模式应用程序编程接口API&#xff0c;它提供了主机将计算内核启动到可用HSA代理程序所必须的接口。它可以分为两类&#xff1a;核心和扩展。HSA核心运行时API旨在支持HSA系统平台体系结构规范所需的操作&#xff0c;并且必须得到任何符合HSA的系统的支…

Java多线程导入Excel示例

在导入Excel的时候&#xff0c;如果文件比较大&#xff0c;行数很多&#xff0c;一行行读往往速度比较慢&#xff0c;为了加快导入速度&#xff0c;我们可以采用多线程的方式 话不多说直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import com.s…

智慧城市中的数字孪生:数字孪生技术助力智慧城市提高公共服务水平

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、智慧交通管理 2、智慧能源管理 3、智慧环保管理 4、智慧公共安全 四、数字孪生技术助力智慧城市提高公共服务水平的价值 五、挑战与前景 六、结论 一、引言 随着信息技术的飞速发展&…