慢 SQL 分析及优化
目录
分析慢 SQL
SQL 优化
单表优化
多表优化
- 慢 SQL:指 MySQL 中执行比较慢的 SQL
- 排查慢 SQL 最常用的方法:通过慢查询日志来查找慢 SQL
MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阈值的语句,具体指运行时间超过 long_query_time(慢查询阈值) 值的 SQL,就会被记录到慢查询日志中,long_query_time 的默认值为 10s,意思是运行超过 10s 以上的语句就会被当做慢 SQL 记录到日志中。
分析慢 SQL
如果一条 sql 执行很慢的话,我们通常会使用 mysql 自动的执行计划 explain 来去查看这条 sql 的执行情况

关注 type 字段:
- all — 扫描全表数据
- index — 遍历索引
- range — 索引范围查找
- index_subquery — 在子查询中使用 ref
- unique_subquery — 在子查询中使用 eq_ref
- ref_or_null — 对 null 进行索引的优化的 ref
- fulltext — 使用全文索引
- ref — 使用非唯一索引查找数据
- eq_ref — 在 join 查询中使用主键或唯一索引关联
- const — 将一个主键放置到 where 后面作为条件查询, MySQL 优化器就能把这次查询优化转化为一个常量,如何转化以及何时转化,这个取决于优化器,这个比 eq_ref 效率高一点。
如果存在全索引扫描(type = all) 则说明没有走索引,我们可以给查询的慢字段加上相应的索引就可以提交效率。
通过 key 和 key_len 检查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否又失效的情况
通过 extra 建议判断是否出现回表的情况,如果出现了可以尝试添加索引或修改返回字段来修复
SQL 优化
MySQL 优化分为 单表优化 和 多表优化
单表优化
- 建立并使用索引:索引是提高查询最有效的手段
- 优化查询语句:避免使用 select * ,只查询需要的字段;使用小表驱动大表,比如当 B 表的数据小于 A 表时,先查 B 表,再查 A 表,查询语句:select * from A where id in (select id from B);如果是聚合查询,尽量使用 union all 代替 union,union 会多义词过滤,效率比较低;不使用 order by rand();
- 优化表结构和数据类型:单表不要有太多字段,建议在 20 个字段以内,使用可以存下数据最小的数据类型,尽可能使用 not null 定义字段,因为 null 占用 4 字节空间。
多表优化
- 表拆分:就是分表,让每张表的数据量变小,从而提高查询效率。表拆分又分为:垂直分隔和水平分隔。
垂直拆分:是指数据表列的拆分,把一张列比较多的表拆分为多张表,比如,用户表中一些字段经常被访问,将这些字段放在一张表中,另外一些不常用的字段放在另一张表中,插入数据时,使用事务确保两张表的数据一致性。
水平拆分:指数据表行的拆分,表的行数超过200万行时,就会变慢,这时可以把一张的表的数据拆成多张表来存放。通常情况下,我们使用取模的方式来进行表的拆分,比如,一张有 400W 的用户表 users,为提高其查询效率我们把其分成 4 张表 users1,users2,users3,users4,然后通过用户 ID 取模的方法,同时查询、更新、删除也是通过取模的方法来操作。
- 读写分离:一般情况下对数据库而言都是“读多写少”,换言之,数据库的压力多数是因为大量的读取数据的操作造成的,我们可以采用数据库集群的方案,使用一个库作为主库,负责写入数据;其他库为从库,负责读取数据。这样可以缓解对数据库的访问压力。
优化方式有很多, 比如索引、查询优化(减少联表查询等)、减少锁竞争等因素,所以具体的慢 SQL 优化,需要根据实际的业务场景再做优化决策。
相关文章:
慢 SQL 分析及优化
目录 分析慢 SQL SQL 优化 单表优化 多表优化 慢 SQL:指 MySQL 中执行比较慢的 SQL排查慢 SQL 最常用的方法:通过慢查询日志来查找慢 SQL MySQL 的慢查询日志是 MySQL 提供的一种日志记录,它用来记录在 MySQL 中响应时间超过阈值的语句&…...
PTA:计算m到n之间所有素数的和
题目 计算m到n之间所有素数的和,其中 2 < m <n <100 输入格式: 请在这里写输入格式。例如:输入两个正整数 输出格式: 请在这里描述输出格式。例如:输出两个正整数之间的素数和。 样例 输入样例: 在这里给出一组输入。例如&…...
Golang实现YOLO:高性能目标检测算法
引言 目标检测是计算机视觉领域的重要任务,它不仅可以识别图像中的物体,还可以标记出物体的位置和边界框。YOLO(You Only Look Once)是一种先进的目标检测算法,以其高精度和实时性而闻名。本文将介绍如何使用Golang实…...
文档 + 模型
文档 模型 0: 基于MATLAB的soc锂电池系统设计 1: 电力系统继电保护仿真设计-毕业论文 2: 继电保护仿真-三段式电流保护的方案设计及分析-相间短路 3: 直流电机双闭环控制系统 转速电流双闭环调速 4: matlab电力系统继电保护仿真 三段电流保护仿真-双侧电源系统 5: OFDM-MIMO课…...
计算机毕业设计php+bootstrap小区物业管理系统
意义:随着我国经济的发展和人们生活水平的提高,住宅小区已经成为人们居住的主流,人们生活质量提高的同时,对小区物业管理的要求也越来越高,诸如对小区的维修维护,甚至对各项投诉都要求小区管理者做得好&…...
Osg线程模型(选择不当,会引发崩溃)
来自《最长的一帧》...
2161根据数字划分数组
给你一个下标从 0 开始的整数数组 nums 和一个整数 pivot 。请你将 nums 重新排列,使得以下条件均成立: 所有小于 pivot 的元素都出现在所有大于 pivot 的元素 之前 。所有等于 pivot 的元素都出现在小于和大于 pivot 的元素 中间 。小于 pivot 的元素之…...
Oracle Linux 9.3 发布
导读Oracle Linux 9 系列发布了第 3 个版本更新,支持 64 位 Intel 和 AMD (x86_64) 以及 64 位 Arm (aarch64) 平台。与所有的 Oracle Linux 版本一样,此版本与相应 RHEL 版本 100% 应用二进制兼容。 对于 x86_64 和 aarch64 架构,Oracle Li…...
XML Schema中的simpleContent 元素
XML Schema中的simpleContent 元素出现在complexType 内部,是对complexType 的一种扩展、或者限制。 simpleContent 元素在complexType元素内部最多只能出现1次。 simpleContent元素下面必须包含1个restriction或者extension元素。 例如,下面的Schema片…...
线性分类器--分类模型
记录学习 北京邮电大学计算机学院 鲁鹏 为什么从线性分类器开始? 形式简单、易于理解 通过层级结构(神经网络)或者高维映射(支撑向量机)可以 形成功能强大的非线性模型 什么是线性分类器? 线性分…...
【开源】基于Vue和SpringBoot的企业项目合同信息系统
项目编号: S 046 ,文末获取源码。 \color{red}{项目编号:S046,文末获取源码。} 项目编号:S046,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合…...
指针数组用指针变量模拟二维数组
指针数组 指针数组是指针还是数组?? 整型数组:数组中的每个元素都是整型 字符数组:数组中的每个元素都是字符 指针数组:数组中的每个元素都是指针 #include<stdio.h> int main() { int a 10; int* …...
接口文档自动生成工具:详细教程和实用技巧
本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码。好处简单总结有以下几点: 自动生成接口文档: 不用手写,一键点击就可以自动 生成文档,当有更新时,点击一下就可以自动同步接口文档;代…...
C语言--不创建第三个变量,实现对两个数字的交换
我们先来看一下,创建临时变量交换两个数字。 #include<stdio.h> {int a2;int b3;int tmp0;printf("before:a%d b%d\n",a,b);tmpa;ab;btmp;printf("after:a%d b%d\n",a,b);return 0; } 图解: 运行结果: 再看一下不…...
Java中的mysql——面试题+答案(数据库连接池,批处理操作)——第22期
当涉及Java中的MySQL时,面试题的范围可以涵盖更多方面,包括高级主题和实践经验。 什么是Hibernate?它与JDBC有什么区别? 答案: Hibernate是一个开源的对象关系映射(ORM)框架,它允许J…...
商用车的智慧眼车规级激光雷达
1、商用车自动驾驶技术:巨大的降本增效空间 2、感知是第一步:看懂环境路况才能安全的自动驾驶 3、多传感器融合,感知信息冗余,保障自动驾驶安全 4、商用车需要什么样的激光雷达 5、车规级激光雷达的软硬件成熟度及延展性 &#x…...
【NI-RIO入门】为CompactRIO供电
在大多数情况下,您可以使用可直接连接系统的电源,例如墙上的电源插座。但是,某些应用程序或环境缺乏可用电源,您必须使用其他电源,例如电池。无论您是否有可用电源,您可能都希望通过为系统提供一些冗余来确…...
【数据结构/C++】栈和队列_链队列
#include <iostream> using namespace std; // 链队列 typedef int ElemType; typedef struct LinkNode {ElemType data;struct LinkNode *next; } LinkNode; typedef struct {LinkNode *front, *rear; } LinkQueue; // 初始化 void InitQueue(LinkQueue &Q) {Q.fron…...
C#,《小白学程序》第二十一课:大数的减法(BigInteger Subtract)
1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的(加减乘除)四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// </summary> p…...
HarmonyOS ArkTS Video组件的使用(七)
概述 在手机、平板或是智慧屏这些终端设备上,媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集,还是视频的播放、切换、循环,亦或是相机的预览、拍照等功能,媒体组件都是必不可少的。以视频功能为例&a…...
d2s-editor:5个核心功能助你深度定制暗黑破坏神2游戏体验
d2s-editor:5个核心功能助你深度定制暗黑破坏神2游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 对于暗黑破坏神2的忠实玩家而言,反复刷装备、重新练级往往是游戏体验中的痛点。d2s-editor作为一…...
Design Compiler实战:set_input_delay命令的10种典型用法与避坑指南
Design Compiler实战:set_input_delay命令的10种典型用法与避坑指南 在数字IC设计流程中,RTL综合阶段对时序约束的精确把控往往决定着芯片最终性能的成败。作为Synopsys Design Compiler的核心约束命令之一,set_input_delay的正确使用直接关系…...
Python的__getattr__代理
Python魔法方法探秘:__getattr__的代理艺术 在Python的动态特性中,__getattr__方法是一个强大的工具,它允许开发者拦截未定义属性的访问,从而实现灵活的代理模式或动态行为处理。无论是构建ORM框架、实现懒加载,还是设…...
DAMOYOLO-S训练复现:实时口罩检测-通用在AutoDL平台上的完整训练流程
DAMOYOLO-S训练复现:实时口罩检测-通用在AutoDL平台上的完整训练流程 1. 引言:从部署到训练,掌握口罩检测核心技术 你可能已经体验过一些现成的AI模型,比如上传一张照片,就能自动识别出谁戴了口罩、谁没戴。这种技术…...
StructBERT模型Java八股文知识库构建:面试题智能去重与归类
StructBERT模型Java八股文知识库构建:面试题智能去重与归类 你有没有过这样的经历?为了准备Java面试,在网上搜罗了成百上千道“八股文”题目,结果发现很多题目问法不同,但核心考点一模一样。比如“HashMap的底层实现原…...
Phi-4-Reasoning-Vision高算力适配:双卡4090显存利用率提升至92%实测
Phi-4-Reasoning-Vision高算力适配:双卡4090显存利用率提升至92%实测 1. 项目概述 Phi-4-Reasoning-Vision是一款基于微软Phi-4-reasoning-vision-15B多模态大模型开发的高性能推理工具。该工具专为双卡RTX 4090环境优化,通过多项技术创新实现了92%的显…...
告别在线翻译!Hunyuan-MT 7B本地翻译工具实测
告别在线翻译!Hunyuan-MT 7B本地翻译工具实测 1. 为什么需要本地翻译工具 在数字化时代,语言障碍仍然是全球交流的主要挑战之一。传统在线翻译服务虽然普及,但存在三个明显痛点:网络依赖导致离线环境无法使用、隐私安全问题让敏…...
AudioSeal镜像免配置教程:开箱即用Gradio Web界面(7860端口)完整指南
AudioSeal镜像免配置教程:开箱即用Gradio Web界面(7860端口)完整指南 1. 项目概述 AudioSeal是Meta公司开源的一套专业级语音水印系统,专门用于AI生成音频的检测和溯源。这个工具就像给音频文件打上"隐形身份证"&…...
Java的java.lang.runtime.ObjectMethods记录类方法自动生成的底层机制
Java记录类方法自动生成的底层机制探秘 在Java 14中引入的记录类(Record)简化了不可变数据载体的定义,而其背后的java.lang.runtime.ObjectMethods类则是实现自动生成equals()、hashCode()和toString()等核心方法的关键。这一机制通过编译时…...
放弃CMSIS-DSP?实测STM32H7优化RNNoise神经网络运算的几种思路与效果对比
STM32H7神经网络加速实战:从CMSIS-DSP到手工优化的性能突围 在嵌入式音频处理领域,实时噪声抑制一直是工程师们面临的挑战。当我们将目光投向STM32H7这类高性能微控制器时,往往会期待其Cortex-M7内核与双精度FPU能轻松应对神经网络计算。但现…...
